簡單的問題。從列表中刪除NIL's LISP
假設我在列表q中有一堆NIL。有沒有簡單的方法來刪除NIL並保持數字? eval在這裏似乎不起作用。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 4)
簡單的問題。從列表中刪除NIL's LISP
假設我在列表q中有一堆NIL。有沒有簡單的方法來刪除NIL並保持數字? eval在這裏似乎不起作用。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 4)
Common Lisp的保持,而不是隻從你的列表l
號碼,刪除,如果你可以使用刪除:
(remove nil '(nil 1 nil 2 nil 3 nil 4))
Common Lisp中,也許還有其他方言:
(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
用戶「規格」有一個更直接的答案。 – 2012-02-20 18:26:05
如果您使用計劃,這將很好地工作:
(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))
(filter (lambda (x) (not (equal? x 'NIL)))
lst)
正如我在我上面的評論中指出,我不確定您使用的是哪種Lisp方言,但是您的問題完全符合過濾器函數的模型(Python對其過濾器here有很好的文檔)。從SICP拍攝的計劃實施
(define (filter predicate sequence)
(cond ((null? sequence) nil)
((predicate (car sequence))
(cons (car sequence)
(filter predicate (cdr sequence))))
(else (filter predicate (cdr sequence)))))
假設,當然,你的Lisp解釋不具有內置過濾功能,因爲我懷疑它。然後,您可以通過調用
(filter number? l)
聽起來你正在尋找一個過濾功能。您使用哪種Lisp方言(Scheme,Common Lisp等)? – 2012-02-20 03:45:12
Common Lisp。這是有道理的有一個內置的函數,忽略NILs .. – CyberShot 2012-02-20 03:48:49
@JohnPick釘它,檢查他的答案! – 2012-02-20 03:57:13