diff options
Diffstat (limited to 'basics.scm')
-rw-r--r-- | basics.scm | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/basics.scm b/basics.scm new file mode 100644 index 0000000..4c52883 --- /dev/null +++ b/basics.scm @@ -0,0 +1,52 @@ +;;;; variables +(define my-var 15) +my-var + +;; set to something else +(set! my-var 20) + +;;;; functions +(define (find value lst) + (if (pair? lst) + (begin + (display (string-append "Looking at: " (number->string (car lst)) + "\n")) + (if (equal? (car lst) value) + (begin (display "Found it!\n") + (car lst)) + (find value (cdr lst)))) + #f)) + +(find 5 '(1 2 3 4 5 6)) + +;; note that variables and functions exist in the same +;; namespace, and that we can define functions in a +;; slightly more ugly way, but looks a lot like a var +;; declaration: +(define find-x (lambda (value lst) + (if (pair? lst) + (begin + (display (string-append "Looking at: " (number->string (car lst)) + "\n")) + (if (equal? (car lst) value) + (begin (display "Found it!\n") + (car lst)) + (find value (cdr lst)))) + #f))) + +(find-x 4 '(1 2 3 4 5 6)) + +;;;; let + +;; let as a looping construct +(let find-loop ((value 5) + (lst '(1 2 3 4 5))) + (if (pair? lst) + (begin + (display (string-append "Looking at: " (number->string (car lst)) + "\n")) + (if (equal? (car lst) value) + (begin (display "Found it!\n") + (car lst)) + (find-loop value (cdr lst)))) + #f)) |