0

文字列の母音、子音、その他の記号をそれぞれ 0 の C、V に変更するプログラムを作成する必要があります。入力をいただければ幸いです。

(defun string-to-list (string)
(loop for char across string collect char))

(defun is-vowel (char) (find char "aeiou" :test #'char-equal))

(defun is-consonant (char) (find char "bcdfghjklmnpqrstvwxyz" :test #'char-equal))

(defun letter-type (char)
(if (is-vowel char) "V"
(if (is-consonant char) "C"
"0")))

(defun analyze-word (word-string)
(loop for char across word-string collect (letter-type char)))

また、文字列にしたいのですが、どうすればいいですか?リストを繰り返し処理して文字列にする関数を定義する必要がありますか、それとも簡単な方法ですか?

4

2 に答える 2

2
(defun letter-type (char)
  (cond ((find char "aeiou" :test #'char-equal) #\V)
        ((alpha-char-p char) #\C)
        (t #\0)))

CL-USER> (map 'string #'letter-type "analyze-word")
"VCVCCCV0CVCC"
于 2013-04-02T14:15:19.087 に答える
0

アイデアのために:

(defun multi-replace-if (sequence function &rest more-functions)
  (map (type-of sequence)
       (lambda (x)
         (loop for f in (cons function more-functions)
            for result = (funcall f x)
            while (eql x result)
            finally (return result)))
       sequence))

(multi-replace-if "bcdfghjklmnpqrstvwxyz"
                  (lambda (x) (if (find x "aeiouy") #\v x))
                  (lambda (y) (declare (ignore y)) #\c))
"cccccccccccccccccccvc"
于 2013-04-02T20:56:25.397 に答える