2012-11-01 50 views
1

在lisp中是否有像find一樣的函數返回true,而不是我們試圖找到的元素?在lisp中找到的東西

例如:

我想要它做的

(find 'x '(a c x)) = t

(find 'x '(a c x)) = x

此外,我問的原因是因爲我想達到的最深元素在列表中。我的計劃是每次遞歸調用它時將列表變平。

然後,我會停止遞歸調用時

(mapcar 'atom list)

會告訴我的每一個原子中有真。

您認爲這是解決此問題的好方法嗎?

+1

爲什麼?在lisp什麼都沒有的情況下是真的。然而,雙重否定會做你想要的:即(not(null(find ...))) –

回答

1

有沒有這樣的功能,但它不能更容易寫一個:

(defun find-t (&rest args) 
    (when (apply #'find args) 
    t)) 

而且不是(mapcar 'atom list)可以使用(every #`(eql t %) list),即檢查在list每一個項目是完全t。 (這裏的#`()是我用的一個參數lambda s的句法糖。)

但總的來說目前還不清楚,你試圖用所有這些來達到目的。你能詳細說明你想做什麼嗎?

+0

正如我在描述中所說的那樣。 我試圖找到列表中最深的原子。 所以我正在做的是逐級扁平化列表。 例如: 我想 '(扁平化「(A(B(d(GF)))E))=(AB(d(GF))E)' 因此我將使用find檢查列表中還有任何列表。 當沒有我會返回最深的元素。 但是,現在我很難找到如何逐級將其平坦化= P –