【发布时间】:2021-12-09 12:53:55
【问题描述】:
我正在通过一个项目来更好地理解 Scheme。我的方案项目的目标是获取以下箭头左侧的输入并生成右侧的输出:
(* (+ 1 a) (+ 1 a))
==>
(let* ((g128572 (+ 1 a)))
(* g128572 g128572))
要准确详细说明程序中需要发生的事情,需要生成一个 let*。 let 的绑定将是一系列随机生成的“变量”字符串,这些字符串具有与之关联的值。该值来自输入的左侧。任何出现不止一次的东西都会出现在 let 绑定中。 let 的主体将是插入了变量名的表达式,而不是表达式。
我的问题如下:
是否只能以下面代码返回的形式返回?
(define (example)
(cons 'let* (cons '((g128572 (+ 1 a)))
(cons '(* g128572 g128572)
'()))))
返回值是'(let* ((g128572 (+ 1 a))) (* g128572 g128572)),从技术上讲,它是一个列表,需要采用(eval '(let* ((g128572 (+ 1 a))) (* g128572 g128572))) 的形式才能实际评估,或者我可以实际返回函数本身,我需要拥有的一切是(let* ((g128572 (+ 1 a))) (* g128572 g128572)),它会成功运行并自行评估?
希望我清楚我在问什么。
【问题讨论】:
-
你的意思是在你的例子中写
(+ a 1)和(+ 1 a)吗? -
哦,哎呀。应该都是同一个表达式。