Yazdığım her Lisp programında belirli bir işlevi yeniden uygulamak zorunda kaldım. Bu işlev çok kullanışlı olduğundan, daha önce uygulanmış olmalıdır. İyi bilinmesini beklerdim. Belki de Common Lisp'in standart kütüphanesinin bir parçası. Ne deniyor ve hangi kütüphaneden geliyor?Bir yüklemeyi karşılayan alttrees işlev toplama için standart ad?
(defun unknown-function (predicate tree)
(loop for item in tree
if (funcall predicate item) collect item
else if (listp item) append (unknown-function predicate item)))
Bir ağacın içinden inen ve yüklemi tatmin o ağacın bütün düğümlerin düz listesini oluşturur.
Genellikle, gerçekleştirmeye çalıştığınız görev, bir ağacı düzleştiren ve öğeyi bu listeden filtreleyen başka iki işlevi birleştirerek çözülür. Common Lisp'de düzleştirilmiş bir ilkel işlev yoktur (ancak google'da çok fazla tanım bulabilirsiniz, örneğin bkz. [Bu bağlantı] (http://stackoverflow.com/questions/2680864/how-to-remove-nested -paraheses-in-lisp)), filtre işlevi için çıkar-if-remove-if-not ([manual] (http://www.lispworks.com/documentation/HyperSpec/Body/f_rm_rm.htm) kullanabilirsiniz. #)) eğer kaldırın. – Renzo
'flatten' ve' remove-if-not' işlevi bu işlevi üretemedi; çünkü yüklem, ağacın alt listelerini seçebilirken, 'flatten', yüklemenin onları görme şansı elde etmeden önce tüm alt listelerden kurtulur. –