2016-08-08 9 views
1

Ich habe Probleme, eine Funktion in Schläger zu schreiben, die eine andere Funktion übernehmen soll, wie es zunächst Parameter ist und eine Liste als zweites.Übergeben eines Parameters rekursiv in Racket

Alles scheint gut auf dem ersten Aufruf der Funktion zu gehen, aber wenn ich versuche, es rekursiv als Parameter mit der Funktion aufzurufen, es Parameter an die Funktion fehlt. Ich möchte, dass diese Parameterfunktion als Funktion bei der Rekursion übergeben wird, aber für die Auswertung an anderen Stellen in der Definition verwendet wird. Jede Hilfe würde sehr geschätzt werden.

(define apply-to-pairs 
    (lambda (arg1 arg2) 
    (if (or (equal? (length arg2) 0) 
      (equal? (length arg2) 1)) 
     '() 
     (cons (arg1 (car arg2) (car (cdr arg2))) 
       (apply-to-pairs (arg1 (cdr (cdr arg2)))))))) 

Dies ist mein Code und es kompiliert gut, aber wenn der rekursive Aufruf anwenden zu Paaren wird das Programm will Parameter für arg1 durchgeführt, während ich es nur wollen, wie die Funktionsdefinition übergeben werden, um es in so kommt . Ich bekomme dort Fehler 'erwartet 2 Parameter, aber nur 1 gefunden', weil es (cdr (cdr arg2)) als ein Argument zu suchen, während ich meine, dass der zweite Parameter für den rekursiven Aufruf sein.

Antwort

3

In Ihrem rekursiven Aufruf anwenden zu Paaren Sie stattdessen fordern arg1 einfach als Wert übergeben. Das heißt, Sie haben einen zusätzlichen Satz von Parens um (arg1 (cdr (cdr arg2))). In voller Höhe, was Sie wollen, ist

(define apply-to-pairs 
    (lambda (arg1 arg2) 
    (if (or (equal? (length arg2) 0) (equal? (length arg2) 1)) 
     '() 
     (cons (arg1 (car arg2) (car (cdr arg2))) 
       (apply-to-pairs arg1 (cdr (cdr arg2))))))) 

Betrachten Sie Ihre Code-Formatierung über mehrere Zeilen, so dass es einfacher ist, diese Fehler zu erkennen.

+0

Sie sind ein Leben genießen. Ich danke dir sehr. Neu ist die Programmierung in Racket und die Formatierung ist ein sehr guter Rat, an dem ich arbeiten werde. Danke noch einmal. – Cheme

Verwandte Themen