- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Lispについてわからないことが(Scheme))
Lispの要素の数を返す関数の定義方法とリストの違いについて
このQ&Aのポイント
- Lispの勉強ソフトで、関数lを『引数としてxを受け取ると、xの要素の数を返す関数』として定義する問題があります。
- 初めに試した定義ではオーバーフローが発生し、終了してしまいました。ネットで検索した結果、もう一つの定義が正解とされていました。
- しかし、この2つのリストの違いがわかりません。ifの使い方の間違いかもしれません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
間違えているのは「if の使い方」ではなく「条件の書き方」です. あなたが書いたのは「x と null? の値が等しいときに 0 を, そうでないときに (+ 1 ...) を返す」という関数です. さて, じっと考えてください. 「x と null? の値が等しい」ことはありえますか? 「答え」にあるのは「x が nil なら 0, そうでなければ (+ 1 ...) を返す」という関数です. これを if で書くと (define l (lambda (x) (if (null? x) 0 (+ 1 (l (cdr x)))))) です.
お礼
よくわかりました ありがとうございました