我对LISP非常陌生,并且正在解决一些初学者问题。我试着定义一个ISPRIME函数,但它似乎没有正常工作。这里是我的代码:定义ISPRIME函数的麻烦
(defun ISPRIME (n &optional (d (- n 1)))
(if (= d 0)
(return-from ISPRIME t))
(if (= (mod n d) 0)
(return-from ISPRIME nil))
(ISPRIME n (- d 1)))
但是一旦运行我的代码使用值5为例:
(ISPRIME 5)
Nil
5应该是一个素数。我怀疑一切都落入:(if(=(mod nd)0)语句中,当它不应该是.d应该继续递减,直到达到0并返回true,但它不。看到这里我的逻辑错误是发生
任何及所有的帮助感激
'(mod 5 1)'。另外,你应该使用['COND'](http://www.lispworks.com/documentation/HyperSpec/Body/m_cond.htm)而不是'IF' +'RETURN-FROM's。 – jkiiski