我一直在尝试寻找一种方法来进行“步骤”评估。我在其中调用 a 函数,它评估 common lisp 的最嵌套列表。
例如:
'(+ 2 (+ 3 4))
; would eval to:
'(+ 2 7)
在该示例中,它仅计算 3 + 4 并停在那里。它没有像 lisp 通常那样继续评估 2 + 7。
所以我希望代码找到最嵌套的列表并评估最嵌套的列表,而不评估整个列表。
例如:
'(+ 2 3 4 5 (+ 4 5 (- 5 6) 1 (+ 10 8 5 (- 10 11))) 10 7)
它将找到最嵌套的列表,(- 10 11)
,并对其进行评估:
'(+ 2 3 4 5 (+ 4 5 (- 5 6) 1 (+ 10 8 5 -1)) 10 7)
同样,它只评估一次,并且不会立即评估整个列表。
有人知道如何对最嵌套列表进行步骤评估吗?要使用 eval 或其他东西来执行列表中最嵌套的部分,而不需要一次 eval
整个列表?我遇到的问题是我不知道如何评估最嵌套的列表,然后将其重新组合在一起。我不知道如何处理这个问题。请告诉我 Lisper 大师会如何做到这一点。
最佳答案
我们使用step
:
(step (+ 2 (+ 3 4)))
step 1 --> (+ 2 (+ 3 4))
Step 1 [4]> step
step 2 --> 2
Step 2 [5]> step
step 2 ==> value: 2
step 2 --> (+ 3 4)
Step 2 [6]> step
step 3 --> 3
Step 3 [7]> step
step 3 ==> value: 3
step 3 --> 4
Step 3 [8]> step
step 3 ==> value: 4
step 2 ==> value: 7
step 1 ==> value: 9
9
它并不完全符合您的要求,但已经非常接近了。原因是 Common Lisp 需要严格按照步进器执行的顺序来计算表达式。
关于lisp - 步骤 Eval Common Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43270232/