>>353
あと気になったこと色々。

その条件のときだけ何かしたい、って場合は、ifよりもwhenを使う方が意図が分かり易い。
場合で返る値を変えたい場合はif。場合で処理を変えたい場合はcond(condはprogn要らない)。

printしたいだけならconsすると勿体無い。#'(lambda (x y) (format t "(~a ~a)" x y))とかで良い。
新しくコンスセルが作られちゃうので、メモリが無駄になるし遅くなる。

(cons ... nil)ってのはリストを作りたいと思うんだけど、(list ...)で良い。さらに言えば、順番関係無い、
あるいは最後にリストを反転して良いなら、appendは(cons ... list)で良い。pushってのもある。

シンボルの比較ならeqで良い。equalpは色々な物を比較できるけど遅い。

そこでそういう風にsetqするとグローバルな変数が誕生する。letの使用を検討すべき。

実際のプログラムでは、探した組み合わせをどうこうしたい場合がほとんどなので、
どうせなら組み合わせをリストとかで返したい。

以上、分かるところだけ直すと良いと思う。多少は先生の覚えがめでたくなるはず。