2017-01-11 55 views
-1

要完成練習,我需要檢查一個元素是否在列表或沒有。我知道,有在口齒不清功能member,但我們的教練是非常嚴格的,不會讓我們使用還沒有被覆蓋在使用過程中的事情。檢查項目的存在口齒不清

什麼是檢查是否一個原子是在列表中只使用condnilcarnotcdr+equaldefun的方法嗎?


編輯: Doseke的評論後,這裏是一個嘗試:

(defun presence (list item) 
    (cond 
     ((atom list) nil) 
     ((equal (car list) item) t) 
     ((consp list) (presence (cdr list) item)) 
     (t nil) 
    ) 
    ) 

編輯:我改變了標題,使其與我的實際問題相匹配

+0

是否可以使用遞歸和檢查項目是否等於汽車? – Doseke

+0

@Doseke:是的,我是這麼認爲的 –

+0

'atom','consp'和't'不是你「只使用」列表的一部分。 – kmkaplan

回答

2

既然你在使用的功能有限,它可能是這樣的,我猜:

(defun member-2 (x xs) 
    (cond ((not xs) nil) 
     ((equal x (car xs)) xs) 
     (t (member-2 x (cdr xs))))) 
+0

小雞蛋裏挑骨頭,用不是istead,這將是更好地使用ENDP,因爲它傳達的意圖更好。或者至少爲NULL – PuercoPop

+2

是的。我剛剛使用了op的問題中的約束。它包括'不',但不包括空值) – leetwinski