1
我需要幫助搞清楚我有什麼錯我的代碼中的一員,這是分配問題:CLISP遞歸函數的ATOM返回,如果它是一個列表
寫一個遞歸函數命名MYMEMBER接受一個ATOM (atm)和LIST(lst),如果它是成員,則返回ATOM,否則返回0。 (MYMEMBER ‘D ‘(A B C D E F G) returns => D
ex。 (MYMEMBER ‘H ‘(A B C D E F G) returns => NIL
這是我有:
(defun mymember (atm lst)
(cond ((null lst) nil)
((equal atm (car lst)) lst)
(t (mymember atm (cdr lst)))))
礦的回報:
(mymember 'd '(a b c d e f g))
; ==> (D E F G)
如何解決它,所以它只有返回d,而不是返回列表的其餘部分?
樣式/可讀性:添加連字符,不縮寫詞,cond後的換行符(「mymember」=>「my-member」,「atm」=>「atom」,「lst」=>「list」) – coredump
您可以創建兩個字符都爲「foo」的不同字符串。即使它們不是相同的字符串,它們也會保持相同。要測試一個「foo」是否真的在列表中,您不能使用EQUAL,因爲它會識別另一個。我推薦EQL。 (可選的EQ不適用於數字和字符。) – kennytilton
你有一個非常簡單/容易的錯誤,只是盯着它,如果有必要,用鉛筆和紙手執。 Lisp在這裏沒什麼特別的。 – kennytilton