2017-11-05 1 views
-1

Ich versuche, eine Prozedur zu schreiben, die eine Schließung zurückgibt. Ich möchte in der Lage sein, jedes Verfahren auf meine Serie anzuwenden. Das ist was ich bisher habe und es funktioniert nicht für mich.Schreiben einer Schließung, die eine Prozedur auf eine Serie anwendet

(define (forAll n m) 
    (lambda (op start) 
     (op (op n start) (+ n 1) m))) 

Ich möchte in der Lage sein, diese Operationen zu tun:

(define my_iterator (forAll 1 5))  
(my_iterator + 0) → 15 
(my_iterator * 1) → 120 
(my_iterator (lambda (x y) (display x)(display " ")) "") → 1 2 3 4 5 

Antwort

0

Sie müssen der lokale Prozedur einen Namen geben, so dass Sie auf sie Rekursion können und es muss mehr Argumente als Ihr Vertrag hat Da Sie es für jede Iteration durchlaufen müssen. Hier ist ein Grundgerüst dessen, was Sie ungefähr implementieren müssen:

(define (for-all from to) 
    (define (helper op start from) 
    (if stop-condition-expression 
     start 
     (helper op new-start-expression new-from-expression))) 

    (lambda (op start) 
    (helper op start from))) 
+0

was wäre der Stoppzustand? –

+0

@ScrappyMontana Es ist, wenn 'von' im Helfer größer ist als' zu'. – Sylwester

Verwandte Themen