summaryrefslogtreecommitdiff
path: root/basics.scm
diff options
context:
space:
mode:
Diffstat (limited to 'basics.scm')
-rw-r--r--basics.scm52
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))