【入門】Common Lisp その8【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0466デフォルトの名無しさん
2011/12/01(木) 05:49:59.47始めてLISPでプログラムを書こうとしているのですが、うまく行きません。
'((A B C) A B C (A (B C)))
と言うリストに対して
A<=a
B<=b
C<=a b
として以下の様になるよう置換したいのです。
'((a b a b) a b a b (a (b a b)))
ところが以下の様にうまくいきません。
* (defun henkan(x)(
cond
((equal x 'A) (list 'a))
((equal x 'B) (list 'b))
((equal x 'C) (list 'a 'b))
(t nil)))
* (defun chikan(x) (if (atom x) (henkan x) (mapcar #'chikan x )))
* (chikan '((A B C) A B C (A (B C))) )
(((A) (B) (A B)) (A) (B) (A B) ((A) ((B) (A B))))
「括弧が増えないやり方」はありますか?
もしくは「一番内側の括弧を外す方法」でも構いません。
なお1つのアトムが最大2つのアトムに変換されるとは限りません。
よろしくお願いします。
ちなみにmultiple-value-bindと言うのも見つけたのですが
可変長とは相性が悪そうに思いました。違いますかね?
■ このスレッドは過去ログ倉庫に格納されています