我有这个功能:

(defun test (variable)
  (cond
    ((null variable) nil)
    ((< (- 12 (other-function variable) 3) 0) 1)
    (t (- 12 (other-function variable) 3))
  )
)

其思想是,如果用3的函数值减去12的结果小于0,则返回1否则,它只会做减法运算。
“其他函数”返回一个数字。
当我运行这个函数时,lispworks会冻结但是如果我在没有第一个条件的情况下运行函数:
(defun test (variable)
  (cond
    ((null variable) nil)
    (t (- 12 (other-function variable) 3))
  )
)

它做减法没有任何问题。
有人能帮忙吗?
谢谢。
编辑:
我试着用这种方式和let:
(defun test (variable)
(let (x (other-function variable))
  (cond
    ((null variable) nil)
    ((< (- 12 x 3) 0) 1)
    (t (- 12 x 3)))
  )
)

但我还是对lispworks有同样的问题,它冻结了当我在没有以下条件的情况下运行时:
 ((< (- 12 x 3) 0) 1)

此功能正常工作。

最佳答案

除非你拿出完整的代码和一个测试用例,否则这是无法复制的。

CL-USER 1 > (lisp-implementation-type)
"LispWorks"

CL-USER 2 > (defun test (variable)
              (cond
               ((null variable) nil)
               ((< (- 12 (other-function variable) 3) 0) 1)
               (t (- 12 (other-function variable) 3))))
TEST

CL-USER 3 > (defun other-function (foo) (+ foo 1))
OTHER-FUNCTION

CL-USER 4 > (test 5)
3

CL-USER 5 > (test 500)
1

另外:LispWorks通常不会“冻结”错误。

关于lisp - Common-LISP-减法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47611082/

10-10 11:13