このバージョンを試してください。すべての構文エラーが修正されます。
(define (test-for-prime number divisor)
(cond ((prime? number)
number)
(else
(let ([next-divisor (find-next-divisor number (+ 1 divisor))])
(test-for-prime (/ number next-divisor) next-divisor)))))
かっこが間違って配置されています。欠落しているものもあれば、間違っているものもあります...スキームのチュートリアルをよく読んで、基本的な手順を書いて、コツをつかむことをお勧めします。特に、ここlet
にドキュメントと特別なフォームの正しい構造があります。:
(let ([id val-expr] ...) body ...+)
最初のフォームは、val-exprsを左から右に評価し、IDごとに新しい場所を作成し、その場所に値を配置します。次に、IDがバインドされているボディを評価します。最後のボディエクスプレッションは、letフォームに対してテールポジションにあります。IDは、bound-identifier =?に従って区別する必要があります。
また、この種の問題を強調し、コードを適切にインデントするのに役立つIDE/エディターを使用することをお勧めします。特に、これを記述するときは、変数を括弧で囲まないようにする必要があることに注意してください(x)
。Schemeは、それx
がプロシージャであり、呼び出していることを前提としています。