首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常见lisp错误:值不是预期的类型编号

常见lisp错误:值不是预期的类型编号
EN

Stack Overflow用户
提问于 2013-04-26 15:03:49
回答 1查看 1.8K关注 0票数 1

我是lisp新手,我的函数有一些问题:

代码语言:javascript
复制
(setf (symbol-function 'reduce-our)
    #'(lambda(new-expression)
            (setf expression nil)
              (loop while (not (equal new-expression expression)) do
                        (setf expression new-expression)
                        (setf new-expression (reduce-once-our expression))
                        (if (not (equal 'new-expression 'expression))
                            (format t " ==> ~A Further reductions are impossible.~%"
                             new-expression)
            new-expression))))

(reduce-our '(^ x => x))

这会引发下一个错误:

代码语言:javascript
复制
Error: The value ^ is not of the expected type NUMBER.

我以为lisp正试图在while循环中计算我的输入列表,但是

代码语言:javascript
复制
(not (equal nil '(^ x => x)))

运行得很好,我确信我的函数也会做同样的检查。所以。我不明白这个错误发生在哪里,为什么会发生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 17:09:53

您确定在此函数中发生错误吗?你应该看看回溯。

此外:

代码语言:javascript
复制
(setf (symbol-function 'reduce-our)
   #'(lambda (new-expression)
      ...))

通常写成

代码语言:javascript
复制
(defun reduce-our (new-expression)
   ...)

然后:

代码语言:javascript
复制
(setf (symbol-function 'reduce-our)
  #'(lambda(new-expression)
      (setf expression nil) ...

变量expression是在哪里引入的?它是未声明的。设置该值不会声明变量。

然后:

代码语言:javascript
复制
while (not (foo ...))

就是

代码语言:javascript
复制
until (foo ...)

代码语言:javascript
复制
(if (not (foo)) a b)

代码语言:javascript
复制
(if (foo) b a)

另外:改进缩进。Lisp中的编辑器将为您做这件事。它增加了你和其他人的可读性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16230566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档