If statement 如何在if语句中使用(或)?
这是我的if声明If statement 如何在if语句中使用(或)?,if-statement,lisp,common-lisp,equality,If Statement,Lisp,Common Lisp,Equality,这是我的if声明 (if (equal 1 (or 3 2 1)) (write "ok") (write "wrong")) 我正在尝试执行以下代码: (equal 1 (or 3 2 1)) 它返回零 在这种情况下如何正确使用(或)?如果您愿意将表达式转换为列表,可以使用查找,而不是或 (defun test (x) (if (find x '(1 2 3)) (format t "equal") (format t "not equal"))
(if (equal 1 (or 3 2 1))
(write "ok")
(write "wrong"))
我正在尝试执行以下代码:
(equal 1 (or 3 2 1))
它返回零
在这种情况下如何正确使用(或)?如果您愿意将表达式转换为列表,可以使用
查找,而不是或
(defun test (x)
(if (find x '(1 2 3))
(format t "equal")
(format t "not equal")))
在大多数其他语言中,您现在所做的是1==(3 | 2 | 1)
。这当然毫无意义。你要找的是
(成员1'(3 2 1):测试#=)
默认情况下,通过使用查找特定对象。这适用于诸如整数之类的基本体,但不适用于字符串或混合整数和浮点。您应该使用: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
首先。如何在lisp上真正工作或操作?让我们从几个例子开始
- (或5 4 3)->5
- (或1 2 3)->1
- (或零7 8)->7
OR函数的输出只是不等于NIL的第一个元素
因此,在您的代码中:
(等于13)->零
此函数检查列表l中是否存在元素n
比如说
- (findout 1'(3 2 1))->T
- (findout 4'(3 2 1))->NIL
(定义findout(n-l)
(如果(空l)
无
(如果(等于(车辆l)n)
T
(财政司司长)
)
)
)
然后您可以像这样更改代码:
(if (findout 1 '(3 2 1))
(write "yes")
(write "no")
)或返回第一个真值。也就是3。3永远不等于1。你可以告诉我们你想做什么。“正确”是什么意思?在大多数其他语言中,您现在所做的是1==(3 | | 2 | | 1)
。这当然毫无意义。我假设您正在查找(成员1'(3 2 1):test#'=)
。它适用于整数,但不适用于字符串列表。例如:(成员“TAG”(“TAA”“TAG”))
必须使用正确的比较运算符=
表示数字相等,STRING=
表示区分大小写的字符串,STRING-EQUAL
表示不区分大小写的字符串,等等。谢谢!我在哪里可以阅读更多关于:test#'=
构造的内容?您可以使用find,但这里的成员可能更习惯于使用find。特别是当您需要检查列表中是否为NIL时(因为find将返回NIL,这是错误的)。您的操作是正确的。我忘记了NIL的情况:/该成员更适合。它实际上是有道理的。它只需要约翰·麦卡锡的amb
操作符,或者类似的东西。