作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿伙计们,我刚刚开始在大学学习 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/
我是一名优秀的程序员,十分优秀!