Yet Another Common Lisp Problems #2 doublep
ホームページ移転のお知らせ - Yahoo!ジオシティーズ●問題2
リストの要素が二つあるか調べる述語 doublep を定義してください。
> (doublep '(a b)) t > (doublep '(a b c)) nil > (doublep '(a)) nil
doublep って double-float-p と間違えそうだ。
とりあえずなにも考えずに書いたら
(defun doublep (list) (and (consp list) (cdr list) (null (cddr list))))
(doublep '(1 . 2)) ; Evaluation aborted on `type-error' ; 不正なデータ型です: 2: cons
例によって dotted-list に対応してなかったので修正。
(defun doublep (list) (and (consp list) (consp (cdr list)) (null (cddr list))))
実際必要になったら (= (length list) 2) って書く予感。というか list の長さによって分岐するなら
(case (length list) (1 ...) (2 ...) (t ...))
と書くし、長さ以外にも何か調べるならまとめて別関数にしておいて
(cond ((hoge-fuga-list-p list) ...) ((foo-bar-baz-list-p list) ...) (t ...))
とかしそう。
解答見て「リサイクル!ECO!」と思ったり。