Lab10: https://inst.eecs.berkeley.edu/~cs61a/sp21/lab/lab10/
基本語法: https://www.cnblogs.com/ikventure/p/15033731.html
內置procedure: https://inst.eecs.berkeley.edu/~cs61a/sp21/articles/scheme-builtins/
Q1: Combinations
scm> (if (print 1) (print 2) (print 3))
1
2
scm> (* (if (> 3 2) 1 2) (+ 4 5))
9
scm> (define foo (lambda (x y z) (if x y z)))
foo
# 注意 先傳入z,再判斷x
scm> (foo 1 2 (print 'hi))
hi
2
# 注意 (quote E) yields E itself as the value, without evaluating it as a Scheme expression。
scm> ((lambda (a) (print 'a)) 100)
a
Q2: Over or Under
(define (over-or-under num1 num2)
(if (< num1 num2)
-1
(if (= num1 num2)
0
1)))
Q3: Make Adder
(define (make-adder num) (lambda (x) (+ x num)))
Q4: Compose
(define (composed f g) (lambda (x) (f (g x))))
Q5: Make a List
(define lst (list (list 1) 2 (list 3 4) 5))