所以我对球拍相当缺乏经验,但正在写一个解释器。
我一直无法深入了解闭包到底是什么,或者如何定义/解释“应用闭包”或“制作闭包”。
我只是在写一个带有 match 等的 value-of 解释器。
任何帮助将不胜感激。
给定课堂上的例子 -
(define value-of
(lambda (exp env)
(match exp
[`,b #:when (boolean? b) b]
[`,n #:when (number? n) n]
[`(zero? ,n) (zero? (value-of n env))]
[`(sub1 ,n) (sub1 (value-of n env))]
[`(* ,n1 ,n2) (* (value-of n1 env) (value-of n2 env))]
[`(if ,test ,conseq ,alt) (if (value-of test env)
(value-of conseq env)
(value-of alt env))]
[`(begin2 ,e1 ,e2) (begin (value-of e1 env) (value-of e2 env))]
[`(random ,n) (random (value-of n env))]
[`,y #:when (symbol? y) (apply-env env y)]
[`(lambda (,x) ,body) (make-closure x body env)]
[`(,rator ,rand) (apply-closure (value-of rator env)
(value-of rand env))])))