標準入力した文字列を、文字を要素とするリストに変換
(let* ((lst (concatenate 'list (read-line))) (lst2 (mapcar #'type-of lst))) (format t "~A~%" lst) (format t "~S~%" lst) (format t "~A~%" lst2) (format t "~S~%" lst2))
とすると
» cl 002b.lisp hello (h e l l o) (#\h #\e #\l #\l #\o) (STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR) (STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR STANDARD-CHAR)
となる。ただし、helloは標準入力であり、clはalias cl=clispである。
なお、FORMAT関数の~aはaesthetic、~sはstandardであり、コンピュータに優しい表記だとCommon Lispの文字は#\aなどの表記になる。
ACしたソースコード
上記の仕様確認用のコードを削除し、以下のように書き直した。
(format t "~A~%" (remove-if #'(lambda (x) (find x "aiueo")) (read-line)))
find
[1]> (find #\a "aiueo") #\a [2]> (concatenate 'list "aiueo") (#\a #\i #\u #\e #\o) [3]> (find #\a (concatenate 'list "aiueo")) #\a
のように
(find アイテム シーケンス)
で、シーケンスの要素を返す。
remove-ifとlambdaと高階関数
関数を引数として受け取る関数を高階関数という。
[9]> (remove-if #'(lambda (x) (find x "aiueo")) "hello") hll