这里是我的if语句如何使用(或)在if语句中?
(if (equal 1 (or 3 2 1))
(write "ok")
(write "wrong"))
我试图执行下面的代码:
(equal 1 (or 3 2 1))
它返回零
如何猫我使用(或)正常在这种情况下?
这里是我的if语句如何使用(或)在if语句中?
(if (equal 1 (or 3 2 1))
(write "ok")
(write "wrong"))
我试图执行下面的代码:
(equal 1 (or 3 2 1))
它返回零
如何猫我使用(或)正常在这种情况下?
如果您愿意将表达式转换为列表,您可以使用find
而不是or
。
(defun test (x)
(if (find x '(1 2 3))
(format t "equal")
(format t "not equal")))
你可以使用find,但成员可能会更习惯于这里。特别是如果你需要检查列表中的NIL(因为find会返回NIL,这是错误的)。 –
你是对的。我忘了NIL案例:/ 该成员更适合。 – cb0
你现在在做什么就像1 == (3 || 2 || 1)
在其他大多数语言。这当然没有意义。什么你要找的是
(member 1 '(3 2 1) :test #'=)
默认情况下MEMBER
使用EQL
查找特定对象。这适用于诸如整数之类的基元,但它不适用于字符串或混合整数和浮点数。您应该使用:TEST
关键字参数为您的项目的任何类型指定正确的比较函数。
(member 1.0 '(3 2.0 1) :test #'=) ; numeric
(member "fOo" '("foo" "FOO" "fOo") :test #'string=) ; case-sensitive
(member "foo" '("FOO" "BAR" "QUUX") :test #'string-equal) ; case-insensitive
它确实有道理。它只需要John McCarthy的“amb”运算符,或者类似的东西。 – Kaz
首先。如何真正地运作或运作lisp?我们从几个例子开始。
(OR 5 4 3) - > 5
(OR 1 2 3) - > 1
(OR零7 8) - > 7
OR函数的输出只是第一个不等于NIL的元素。
所以在代码: (等于1 3) - > NIL
此功能检查如果一个元素在一个列表升
例如正存在
(findout 1 '(3 2 1)) - > T
(查找4'(3 2 1)) - >无
(defun findout (n l) (if (null l) nil (if (equal (car l) n) t (findout n (cdr l)) ) ) )
然后你就可以改变你的代码是这样的:
(if (findout 1 '(3 2 1))
(write "yes")
(write "no")
)
或返回第一个真正的价值。这是3. 3永远不等于1. 你可能想告诉我们你想要做什么。 “正确”是什么意思? –
你现在正在做的是像大多数其他语言的'1 ==(3 || 2 || 1)'。这当然没有意义。我假设你正在寻找'(成员1'(3 2 1):test#'=)'。 – jkiiski
它适用于整数,但不适用于字符串列表。例如:'(成员“TAG”'(“TAA”“TAG”))' –