• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Lispについてわからないことが(Scheme))

Lispの要素の数を返す関数の定義方法とリストの違いについて

このQ&Aのポイント
  • Lispの勉強ソフトで、関数lを『引数としてxを受け取ると、xの要素の数を返す関数』として定義する問題があります。
  • 初めに試した定義ではオーバーフローが発生し、終了してしまいました。ネットで検索した結果、もう一つの定義が正解とされていました。
  • しかし、この2つのリストの違いがわかりません。ifの使い方の間違いかもしれません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.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)))))) です.

nomalphard
質問者

お礼

よくわかりました ありがとうございました