gpt4 book ai didi

lisp(素数)代码不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:49 27 4
gpt4 key购买 nike

这是一个接受输入并打印它是否为质数的代码最后一个 if 总是打印“false”,为什么?

(print "Enter a positive integer")
(setq num (read))
(setq i 2)
(setq prime t)
(loop

(if(=(rem num i)0)(setq prime nil) break)
(incf i)
(when (<= (/ num 2)i)(return t))

)

(if()(print "True")(print "False"))

最佳答案

在 Common Lisp 中,假值、空列表和符号 nil 是一样的。忽略除最后一行之外的每一行代码基本上是:

(if nil             ; nil is false
(print "True")
(print "False"))

所以这里 false 总是 false,所以它总是选择替代的 (print "False")。这就是为什么。

其他错误:

  1. 在这段代码中是 setq 变量 iprime 没有定义它们,因为它们很特殊,所以应该给它们*earmuffs* 这样您就可以看到它们与词汇绑定(bind)形成对比。

  2. loop 宏有点奇怪,因为它不使用任何 loop 宏关键字。对似乎 undefined variable break 进行了评估。 loop 宏本身是一种完全不同的语法和语言,您需要以与 lisp 相同的方式学习它。它的语法不是 lispy。

  3. 你应该抽象。使能做好某些工作的功能。在您的代码中使用它们。这是我收集到的您想做的事情:

(defun primep (num)
(loop :for i :from 2 :to (/ num 2)
:never (zerop (rem num i))))

关于lisp(素数)代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47850347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com