dポイントプレゼントキャンペーン実施中!

Lispで括弧の入れ子の中身も含めた最大値を求める関数を自分なりに作ったのですが、条件によってはうまくいきません。
なぜだか教えていただけないでしょうか?

(defun max1 (n)
(cond ((atom n) n)

(t (if (null (cdr n)) (max1 (car n))

(progn (let ((local_max (max1 (cdr n))))
(if (> (car n) local_max)
(car n)
local_max)))))))

> (max1 '(1 2 6 (3 4)))
6
> (max1 '(1 2 (6) ((3 4))))

>: (6) is not a REAL

A 回答 (1件)

とりあえず理由がわかればいいのですか?



>: (6) is not a REAL
このメッセージを見てわかる通り、
(> (car n) local_max)
この比較をしているところの (car n)が、
エラーになるパターンだと
(6) になってしまい、> (6) 4 という比較をしようとして
エラーになっています。
((a) b) の car は a じゃなくて (a)なので、
どうにかしてもう1枚皮をむきましょう。

てなヒントでよろしいでしょうか?

ところで cond と if を混ぜて使うのは珍しいというか
あまり見ないスタイルですね。
できればどっちかにした方が良いと思います。
今回の場合は cond が二分岐ですし。

ところで使っているLispの処理系はなんなのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!