gpt4 book ai didi

lisp - 为什么 LISP 在使用 IF 语句的函数中打印 NIL?

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

我刚开始学习 LISP,我正在尝试创建一个程序,在给定数字时打印出字母等级。

(defun number-to-letter (number)

(if(or(> number 100)(< number 0))
(print "NUMBER OUT OF RANGE, PLEASE ENTER NUMBER WITHIN RANGE 0-100")
)

(if(and(>= number 80)(<= number 100))
(print "A")
)

(if(and(>= number 70)(<= number 79))
(print "B")
)

(if(and(>= number 60)(<= number 69))
(print "C")
)

(if(and(>= number 50)(<= number 59))
(print "D")
)

(if(and(>= number 0)(<= number 49))
(print "F")
)
)

我无法弄清楚为什么我执行程序后它打印NIL。

最佳答案

NIL部分在 Kaz's answer 中得到解决.

一些说明

  • <= 是可变的,你可以写(<= x y z)检查是否x , yz根据 <= 排序.同样适用于other运营商。

  • 你有很多重复。由于您的条件是排他性的,因此您可以将所有 IF 替换为单个 COND .

  • 此外,您可以考虑对 print 的调用在测试之外。

  • 您的代码格式不正确。不要在他们自己的行上加上括号。参见示例 https://google.github.io/styleguide/lispguide.xml或其他资源。

重写

(defun number-to-letter (number)
(print
(cond
((<= 80 number 100) "A")
((<= 70 number 79) "B")
((<= 60 number 69) "C")
((<= 50 number 59) "D")
((<= 0 number 49) "F")
(t "NUMBER OUT OF RANGE, PLEASE ENTER NUMBER WITHIN RANGE 0-100"))))

此外,在实际程序中,我会发出错误信号,而不是像这样直接打印错误消息,但由于这只是一个示例,我想这里没问题。

测试

(number-to-letter 30)

... 打印并返回“F”,因为 PRINT 返回正在打印的值。

关于lisp - 为什么 LISP 在使用 IF 语句的函数中打印 NIL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622246/

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