嘿伙计们,我刚刚开始在我的大学里学习Lisp,但教授非常贫穷,而且自己似乎不懂语言,所以我转向你们所有人.我在Java方面非常有经验,并且在将Java的条件与Lisp相关时遇到了麻烦.这是我被要求解决的问题.
"写一个函数,它接受乘客和两个城市之间的机票量的年龄.如果孩子小于两个机票为0,二至五它是全票价的60%.如果孩子为五他们全程票价."
这是我的解决方案,但我认为这是低效的.
(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)))
Run Code Online (Sandbox Code Playgroud)
现在用Java,我就是这样说的
if (x >= 2 && x =< 5) {
return y*.6
}
else if (x < 2) {
return 0;
}
else {
return y;
}
Run Code Online (Sandbox Code Playgroud)
我要问的是:有没有更好的方法来编写这个Lisp条件?如果我必须检查更大范围的年龄,那么使用这种方法代码将变得非常乏味.有没有一种方法可以在Lisp中检查一个if语句中的2个条件,就像我在Java中所做的那样?非常感谢您查看此代码以及任何未来的响应!
Lisp有一个AND
可用于组合多个条件的运算符.
(defun young-child (x y)
(cond ((and (>= x 2) (<= x 5)) (* y .6))
((< x 2) 0)
(t y)))
Run Code Online (Sandbox Code Playgroud)
你也可以用一个函数调用做(<= 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)))
Run Code Online (Sandbox Code Playgroud)