2011-12-02 39 views
0

我想在lisp中創建一個函數,它接收一個數字和一個列表對並遍歷列表中的對,並刪除第一個分隔符的結果該對的元素,並且同一對的第二個元素與作爲參數傳遞的數量不同。最後它返回一個列表,只有那些分割結果相同的列表。Lisp - 從配對列表中刪除實例

我有下面的代碼至今:

(defun retira-terco(num l1) 
(cond ((null l1)()) 
    ((not (equal num (/ (car(first l1)) (cdr(first l1))))) 
         (retira-terco num (rest l1))) 
    (t (cons (first l1) (retira-terco num (rest l1)))))) 

當我嘗試用一​​個真實的例子,我得到下面的錯誤運行此示例:

Error: `(1)' is not of the expected type `NUMBER' 

我到底做錯了什麼?

+0

所以要返回繁殖一起給你數都對列表? – Luke

+0

我想返回驗證條件的pais列表。這個對中的分數等於數字。我只想從原始列表中刪除元素。 –

回答

6

與您的代碼的問題是在這條線:

(/ (car(first l1)) (cdr(first l1)))

(car (first l1))計算爲一個數字,但(cdr (first l1))評估到列表中。你可能意思是(cadr (first l1))

也就是說,從代碼的角度來看,這個代碼並不是很好。你有一個你想過濾的條件。使用高階編程來表達更多的是這樣的:

(defun foo (num lst) 
    (remove-if (lambda (item) 
       (equal num 
         (/ (car item) 
          (cadr item)))) 
       lst))) 
+0

謝謝,我會試試看。 –