【发布时间】:2018-05-29 13:03:13
【问题描述】:
我尝试在 LISP 中创建 Euklid 算法。 我的代码:
(defun euklid( x y)
(cond
((= x y) x)
((> x y) (euklid((- x y) y)))
)
我收到一个错误In the form (#1=(- X Y) Y), #1# is not a symbol or lambda expression.
我怎样才能纠正这个错误?我知道我的代码中有错误。
【问题讨论】:
-
调用
EUKLID时,参数周围有额外的括号 -
@jkiiski,谢谢!
-
您将
*print-circle*变量设置为true(否则调试器在准备错误消息时会这样做)。这就是为什么神秘的错误信息。如果*print-circle*是nil,则错误消息将类似于“在 ((-X Y) Y) 的形式中,(-X Y) 不是符号或 lambda 表达式”。这就是它的意思。#1=的意思是“在标签 1 下注册下面的对象”,然后#1#的意思是“引用之前标记为 1 的对象”。通过这种“循环符号”,Lisp 支持在打印中准确呈现循环结构和 DAG。 -
@Kaz 很好的解释,虽然我认为“结构共享表示法”(而不是“圆形表示法”)更清晰一些。
标签: lisp common-lisp