2013-06-23 24 views

Trả lời

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

nhờ Will Ness.

Tôi cũng thấy

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

Để đầu ra

(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

để so sánh, trong Haskell nó được gọi là 'iterate' (Haskell có tên thực sự tốt cho các chức năng như vậy):' iterate fx = x: iterate f (fx) '. Và đối với "output" nó có '' take n [] = []; lấy 0 xs = []; lấy n (x: xs) = x: lấy (n-1) xs''. ('a: b' trong Haskell giống như' (a. b) 'trong Đề án). Vì vậy, 'nats = iterate (1+) 1' và chúng ta thấy 10 đầu tiên của chúng với' take 10 nats'. Vợt cũng có 'take'. –

+0

Cảm ơn @Wii Ness một lần nữa, rất nhiều thông tin. –

4
#lang lazy 

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

Rõ ràng đây không làm việc, và 1+ nên được thay thế bởi (lambda (x) (+ x 1)). Nhờ @kenokabe để thử nghiệm. (add1 là tên riêng.)

+1

nope, 1+ có một lỗi .. –

+1

(xác định Nat (cons 1 (bản đồ (lambda (x) (x + 1)) Nat))) Ok bạn có nghĩa là điều này, cảm ơn. –

+0

@kenokabe lỗi là gì, bạn có thể hiển thị nó/sao chép nó ở đây không? –

Các vấn đề liên quan