2011-01-04 21 views
2

Kann ich iterativen Prozess mit rekursiven Aufruf in and Anweisung erstellen?"und" und Tail-Rekursion

Zum Beispiel Zweck haben wir Funktion foo, die nichts tun. Welche Art von Prozess wird es erstellen (iterativ oder Rekursion)?

(define (foo? bar) 
    (if (< bar 0) true (and (> 10 1) (foo? (- bar 1))))) 
+0

Dies wird rekursiv sein, weil die letzte Funktion, die Sie aufrufen, 'und' ist und nicht 'foo?'. – Gabe

+0

@Gabe: 'and' ist Syntax, keine Prozedur. – leppie

+0

@leppie: Angenommen, der Compiler entfernt das ganze Ding nicht von vornherein, wie ändert sich das? – Mehrdad

Antwort

4

Ja, and ist OK - Sie dies im standard lesen kann.

+0

Könnten Sie bitte erklären, warum das iterativ ist? Ich denke es ist nicht, weil der rekursive Aufruf nicht die letzte Operation in der Funktion ist. – Mehrdad

+1

+1 Ich denke, es ist die richtige Antwort. von Standard (per Link in Post) '(und * )' –

+0

Interessant ... +1, auch wenn ich nicht einverstanden bin. Aber kann jemand erklären warum? – Mehrdad

4

Für Lamberts Willen, können wir die Syntax erweitern.

(define (foo? bar) 
    (if (< bar 0) 
     #t ; tail position, but no call 
     (if (> 10 1) 
      (foo? (- bar 1)) ; tail position 
      #f))) ; tail position, but no call 
+0

Danke. Es macht den Prozess klar) –

+1

Yup, danke, dass du dir die Zeit genommen hast, dies zu schreiben! Das macht die Sache klar! : D – Mehrdad

Verwandte Themen