這裏是我的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」))' –