gpt4 book ai didi

Lisp 等级到字母的转换

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

提出的问题:

Define a LISP function SCORE->GRADE which takes a single argument, s, and returns a symbol according to the following scheme:
s ≥ 90 A 73 ≤ s < 77 C+
87 ≤ s < 90 A– 70 ≤ s < 73 C
83 ≤ s < 87 B+ 60 ≤ s < 70 D
80 ≤ s < 83 B s < 60 F
77 ≤ s < 80 B–
If the argument s is not a number then the function should return NIL.

我的回答是:

 (defun SCORE->GRADE (s)
(if (not (numberp s)) (return-from SCORE->GRADE “NIL”))
(progn
(if (>= s 90) (return-from SCORE->GRADE "A"))
(if (and (>= s 87) (< s 90)) (format nil “A-“))
(if (and (>= s 83) (< s 87)) (format nil “B+”))
(if (and (>= s 80) (< s 83)) (return-from SCORE->GRADE “B”))
(if (and (>= s 77) (< s 80)) (return-from SCORE->GRADE “B-“))
(if (and (>= s 73) (< s 77)) (return-from SCORE->GRADE “C+”))
(if (and (>= s 70) (< s 73)) (return-from SCORE->GRADE “C”))
(if (and (>= s 60) (< s 70)) (return-from SCORE->GRADE “D”)
(if (< s 60) (return-from SCORE->GRADE “F”))
)
)
)

它适用于 90,返回 A,然后对于任何其他它只给出这个错误,关于我输入的内容有不同的变量

*** - RETURN-FROM: variable “B” has no value

*** - IF: variable “A-“ has no value

谁能解释为什么我不能为每一行都得到相同的结果?

我已经尝试过消息、格式 t、案例,一些工作最多前 3 个案例然后停止。一直无法弄清楚任何事情。

最佳答案

除了其他答案外,请注意,在您的情况下,您不需要复制公共(public)边界,因为您正试图将分数划分为等级。

(cond
((>= s 90) "A")
((>= s 87) "A-")
((>= s 83) "B+")
...
((>= s 70) "C")
((>= s 60) "D")
(t "F"))

它还减少了您必须在代码中保留的不变量数量,这有助于维护。

关于Lisp 等级到字母的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583675/

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