实现Let*语法的两种方式,主要目的是记录两种编程思路,在编写其他程序时应该也有所裨益。
(define-syntax my-let*
(syntax-rules ()
((_ () bodys ...) (let () bodys ...))
(
(_ ((a1 v1)) bodys ...)
(let ((a1 v1)) bodys ...)
)
(
(_ ((a1 v1) (a2 v2) ...) bodys ...)
(let ((a1 v1)) (my-let* ((a2 v2) ...) bodys ...))
)
)
)
注意,my-let*是可以递归使用的,以及**…**的用法。
(define-syntax my-let*
(syntax-rules ()
(
(_ () bodys ...)
(let () bodys ...)
)
(
(_ ((a1 v1) ...) bodys ...)
(let ()
(define a1 v1) ...
bodys ...
)
)
)
)
这个实现方式与上面的不同,上面的是嵌套let,这里将直接按顺序define内部变量,代码更短。注意此处的**…**的用法。