0

私は現在Schemeを学んでいて、リストの長さを数える何かを書くことを任されています.これは私が現在持っているコードです.

{define (len x) 
    (if(not(null? x))
    (+ 1 len(cdr x))
    (0))}

それを実行すると、次のように'(2 3 4 5)なります。

procedure application: expected procedure, given: '(2 3 4 5) (no arguments)

エラーとして。私は何を間違っていますか?

4

1 に答える 1

2

括弧に問題があります。これを試して:

(define (len x)
  (if (not (null? x))
      (+ 1 (len (cdr x)))
      0))

特に、次の点に注意してください。

  • 関数を呼び出すときは、関数名 (およびパラメーターがある場合は)をで囲む必要()があります。だからlen(x)間違っていて(len x)正しい
  • 何かが関数でない場合は、で囲まないでください()。と書く(0)と、Scheme はそれ0が関数であると信じて適用しようとしますが、明らかに失敗します。
于 2013-10-01T20:03:24.440 に答える