在lisp中是否有像find一樣的函數返回true,而不是我們試圖找到的元素?在lisp中找到的東西
例如:
我想要它做的
(find 'x '(a c x)) = t
不
(find 'x '(a c x)) = x
此外,我問的原因是因爲我想達到的最深元素在列表中。我的計劃是每次遞歸調用它時將列表變平。
然後,我會停止遞歸調用時
(mapcar 'atom list)
會告訴我的每一個原子中有真。
您認爲這是解決此問題的好方法嗎?
在lisp中是否有像find一樣的函數返回true,而不是我們試圖找到的元素?在lisp中找到的東西
例如:
我想要它做的
(find 'x '(a c x)) = t
不
(find 'x '(a c x)) = x
此外,我問的原因是因爲我想達到的最深元素在列表中。我的計劃是每次遞歸調用它時將列表變平。
然後,我會停止遞歸調用時
(mapcar 'atom list)
會告訴我的每一個原子中有真。
您認爲這是解決此問題的好方法嗎?
有沒有這樣的功能,但它不能更容易寫一個:
(defun find-t (&rest args)
(when (apply #'find args)
t))
而且不是(mapcar 'atom list)
可以使用(every #`(eql t %) list)
,即檢查在list
每一個項目是完全t
。 (這裏的#`()
是我用的一個參數lambda
s的句法糖。)
但總的來說目前還不清楚,你試圖用所有這些來達到目的。你能詳細說明你想做什麼嗎?
正如我在描述中所說的那樣。 我試圖找到列表中最深的原子。 所以我正在做的是逐級扁平化列表。 例如: 我想 '(扁平化「(A(B(d(GF)))E))=(AB(d(GF))E)' 因此我將使用find檢查列表中還有任何列表。 當沒有我會返回最深的元素。 但是,現在我很難找到如何逐級將其平坦化= P –
爲什麼?在lisp什麼都沒有的情況下是真的。然而,雙重否定會做你想要的:即(not(null(find ...))) –