単語を含むリストを取り込み、「FOO」という単語が見つかった場合にそのリストを 2 つのリストに分割する関数が必要です。私は再帰的な解決策を思いつきました。最善ではないかもしれませんが、少し問題があります。分析するリストである 1 つの引数を渡すだけで済みますが、2 番目のリストを横に作成する方法がわかりません。助言がありますか?ありがとう!
;Splits a list into 2 if the word 'FOO' is present
;----------------------------------------------------------------------
;LOAD FILE: (load "C:\\split.lisp")
;USAGE: (split '(with great power foo comes great responsibility) '())
;OUTPUT: ((with great power)(comes great responsibility))
(defun split (x y)
(cond
( ;IF: first element in list is nil
(EQ (car x) nil)
x ;RETURN the list
)
( ;ELSE IF: first element is 'FOO'
(EQ (car x) 'FOO)
(cons (reverse y ) (cons (cdr x) nil))
)
( ;ELSE: recursively call split but pass the rest of x and
;prepend y with the head of x
t
(split (cdr x) (cons (car x) y))
)
) ;END cond
) ;END split