gpt4 book ai didi

common-lisp - 口齿不清 : Having Trouble with Conditionals

转载 作者:行者123 更新时间:2023-12-02 00:33:58 25 4
gpt4 key购买 nike

嘿伙计们,我刚刚开始在大学学习 Lisp,但是教授非常穷,而且他自己似乎也不懂这门语言,所以我向你们求助。我在 Java 方面非常有经验,但在将 Java 的条件与 Lisp 联系起来时遇到了困难。这是我需要解决的问题。

“编写一个函数,计算乘客的年龄和两个城市之间的机票价格。如果 child 不到两岁,则机票价格为 0,二岁到五岁之间,则为全额票价的 60%。如果 child 五岁或以上,他们全额票价。”

这是我的解决方案,有效,但我觉得这效率低下。

(defun young-child(x y)
(cond
((< x 2) 0)
((= x 2) (* y .6))
((= x 3) (* y .6))
((= x 4) (* y .6))
((= x 5) (* y .6))
((> x 5) y)))

现在在 Java 中我只会说

if (x >= 2 && x =< 5) {
return y*.6
}
else if (x < 2) {
return 0;
}
else {
return y;
}

我要问的是:有没有更好的方法来编写这个 Lisp 条件语句?如果我必须检查更大范围的年龄,那么使用这种方法的代码将变得非常乏味。 Lisp 有没有一种方法可以像我上面在 Java 中那样检查一个 if 语句中的 2 个条件?非常感谢您查看此代码以及 future 的任何回复!

最佳答案

Lisp 有一个 AND可用于组合多个条件的运算符。

(defun young-child (x y)
(cond ((and (>= x 2) (<= x 5)) (* y .6))
((< x 2) 0)
(t y)))

您还可以通过单个函数调用 (<= 2 x 5) 来完成此操作或(>= 5 x 2)测试是否 x介于2之间和5包容性。

但是如果你测试(< x 2)首先,您不需要测试是否 (>= x 2)之后,因为条件是按照给定的顺序进行测试的。

(defun young-child (x y)
(cond ((< x 2) 0)
((<= x 5) (* y .6))
(t y)))

关于common-lisp - 口齿不清 : Having Trouble with Conditionals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886401/

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