2013-06-23 17 views

risposta

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

grazie a Will Ness.

Ho anche trovato

#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)))) 

Per l'uscita

(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

per il confronto, in Haskell è noto come 'iterato' (Haskell ha davvero un buon nome per tali funzioni):' iterate fx = x: iterate f (fx) '. E per "output" ha '' take n [] = []; prendi 0 xs = []; prendi n (x: xs) = x: take (n-1) xs''. ('a: b' in Haskell è come' (a. b) 'in Schema). Quindi 'nats = iterate (1+) 1' e vediamo i primi 10 di essi con' take 10 nats'. Anche la racchetta ha 'take'. –

+0

Grazie ancora @Wii Ness, molto istruttivo. –

4
#lang lazy 

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

A quanto pare questo non funziona, e 1+ dovrebbe essere sostituito da (lambda (x) (+ x 1)). Grazie a @kenokabe per i test. (add1 è il nome corretto)

+1

no, 1+ ottenuto un errore .. –

+1

(definire Nat (cons 1 (mappa (lambda (x) (+ x 1)) Nat))) Ok, intendevi questo, grazie. –

+0

@kenokabe qual è stato l'errore, potresti mostrarlo per favore/copiarlo qui? –

Problemi correlati