数字がプライムであるかどうかを調べるプログラムを作りたいと思います。2つの関数の代わりにラムダを使用するラケット
まず、私は動作しますが、2番目の引数として2を挿入するようユーザに要求するこの機能を作った:
(define (prim? number counter)
(if (>= counter number)
#t
(if (= (modulo number counter) 0)
#f
(prim? number (+ counter 1)))))
だから私は、ユーザーが必要な情報のみを使用して機能を使用できるように望んでいました、彼がテストしたい番号。これは解決策でした:
私の質問は、lambdaを使用し、エレガントな機能を1つだけ持つことでコードを書き直すことができますか?だから私はこれを書いた:
(define (prim number)
(lambda(counter) (set! counter 2)
(if (>= counter number)
#t
(if (= (modulo number counter) 0)
#f
((lambda(x) (set! counter (+ counter 1)))
(prim number))))))
私はREPLで(prim 5)
を実行すると、数が素数であるかどうか、それは私にメッセージ#<procedure:D:/Racket/prim.rkt:5:2>
ないを与えます。
どうすればlambdaで関数を書くことができますか?
"lambda"を使いたくないと思うので、追加のパラメータを使って内部ヘルパープロシージャを定義し、名前付きの 'let'を使ってください。 –