2013-06-23 12 views

Antwort

3
#lang lazy 
(define Nat (cons 1 (map (lambda (x) (+ x 1)) Nat))) 

Dank Will Ness.

Ich fand auch

#lang lazy 
;;; infinite sequences represented by a_(n+1) = f(a_n) 
(define inf-seq (lambda (a0 f) (cons a0 (inf-seq (f a0) f)))) 
(define Nat (inf-seq 1 (lambda (x) (+ x 1)))) 

Zur Ausgabe

(define (outputListData list) 
    (cond 
     [(null? list) #f] ; actually doesn't really matter what we return 
     [else 
      (printf "~s\n" (first list)) ; display the first item ... 
      (outputListData (rest list))] ; and start over with the rest 
    ) 
) 

(outputListData Nat) 
+0

zum Vergleich, in Haskell ist es bekannt als 'iterate' (Haskell hat wirklich gute Namen für solche Funktionen):' iterate fx = x: iteriere f (fx) '. Und für "output" hat es '' take n [] = []; nimm 0 xs = []; n (x: xs) = x: nimm (n-1) xs''. ("a: b" in Haskell ist wie "(a. b)" in Schema). Also 'nats = iterate (1+) 1' und wir sehen die ersten 10 von ihnen mit 'take 10 nats'. Schläger hat auch 'nehmen'. –

+0

Danke @Wii Ness nochmal, sehr informativ. –

4
#lang lazy 

(define nats (cons 1 (map 1+ nats))) 

Offenbar dies nicht funktioniert, und 1+ sollte durch (lambda (x) (+ x 1)) ersetzt werden. Danke an @kenokabe zum Testen. (add1 ist der Eigenname.)

+1

Nö, 1+ bekam eine Fehlermeldung .. –

+1

(definieren Nat (cons 1 (Karte (lambda (x) (+ x 1)) Nat))) Ok du meintest das, danke. –

+0

@kenokabe was war der Fehler, könnten Sie es bitte zeigen/kopieren Sie es hier? –