Ich möchte ein Programm machen, das herausfindet, ob eine Zahl prim ist oder nicht.Schläger mit Lambda anstelle von 2 Funktionen
Zuerst habe ich diese Funktion, die funktioniert, aber muss den Benutzer 2 als zweites Argument einzufügen:
(define (prim? number counter)
(if (>= counter number)
#t
(if (= (modulo number counter) 0)
#f
(prim? number (+ counter 1)))))
So wollte ich das den Benutzer in der Lage sein, die Funktion zu nutzen, indem nur die notwendigen Informationen mit, die Nummer, die er testen möchte. Das war die Lösung:
(define (is-prime? number)
(prim? number 2))
(define (prim? number counter)
(if (>= counter number)
#t
(if (= (modulo number counter) 0)
#f
(prim? number (+ counter 1)))))
Meine Frage war dann, wie kann ich den Code unter Verwendung von Lambda-Ausdrücke umschreiben und nur eine elegante Funktion? Also schrieb ich folgendes:
(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))))))
Als ich (prim 5)
in der REPL laufen es gibt mir die Meldung #<procedure:D:/Racket/prim.rkt:5:2>
und nicht, wenn die Zahl eine Primzahl ist oder nicht.
Wie könnte ich die Funktion mit Lambdas schreiben?
Ich denke, dass Sie nicht "Lambda" verwenden möchten, was Sie wollen, ist eine innere Hilfsprozedur mit zusätzlichen Parametern zu definieren, verwenden Sie ein benanntes "Let" dafür. –