普通のmember関数だと、
'((sio noodle) (miso noodle))
みたいなリストにmember関数を利用してもNILが返る。
[1]> (member 'miso '((sio noodle) (miso noodle))) NIL
そのため、今回は二重回帰を使う。
今回は変数名にlstではなくtreeを使う。
たとえば(a (b c) d)といったリストがあったとして、
lstは(b c)を考慮せず、(a b c)みたいな感じで扱う。
treeは(b c)も1つのリストとして見做す。
で、(b c)みたいなリストにぶつかったとき、
(b c)の中身も調べるようにする関数を作る。
このとき、(b c)はリストでもいいし、アトムでもいい。
[2]> (defun occur (item tree) (if (atom tree) (eql item tree) (if (occur item (first tree)) t (occur item (rest tree))))) OCCUR [3]> (occur 'miso '((sio noodle) (miso noodle))) T