2013-06-23 6 views
5

मुझे लगता है कि Lazy Racket अनंत सूचियों को संभालने के लिए उपयोगी होना चाहिए। हम प्राकृतिक संख्या की एक अनंत सूची कैसे परिभाषित करते हैंयोजना (आलसी रैकेट) प्राकृतिक संख्याओं की एक अनंत सूची

;; An infinite list: 
(define fibs (list* 1 1 (map + fibs (cdr fibs)))) 

: Wikipedia Lazy Racket article के अनुसार, fibs (फाइबोनैचि संख्या के अनंत सूची) के रूप में परिभाषित किया जा सकता?

उत्तर

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

विल नेस के लिए धन्यवाद।

मैं भी उत्पादन करने के लिए

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

पाया

(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

तुलना के लिए, हास्केल में इसे 'iterate' के रूप में जाना जाता है (हास्केल को ऐसे कार्यों के लिए वास्तव में अच्छे नाम मिलते हैं): 'iterate fx = एक्स: पुनरावृत्त एफ (एफएक्स) '। और "आउटपुट" के लिए इसे 'लेना है [] = []; 0 एक्सएस = [] ले लो; एन (एक्स: एक्सएस) = एक्स ले लो: ले लो (एन -1) xs''। (हास्केल में 'ए: बी' योजना में' (ए। बी) 'की तरह है)। तो 'nats = iterate (1+) 1' और हम उनमें से पहले 10 को '10 नट्स' लेते हैं। रैकेट में भी 'ले लो' है। –

+0

धन्यवाद @Wii नेस फिर से, बहुत जानकारीपूर्ण। –

4
#lang lazy 

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

जाहिर है यह काम नहीं करता है, और 1+(lambda (x) (+ x 1)) द्वारा प्रतिस्थापित किया जाना चाहिए। परीक्षण के लिए @kenokabe के लिए धन्यवाद। (add1 उचित नाम है।)

+1

नहीं, 1 + त्रुटि मिली है .. –

+1

(नेट परिभाषित करते हैं (विपक्ष 1 (मानचित्र (लैम्ब्डा (एक्स) (+ x 1)) नेट))) ठीक है आप इसका मतलब था, धन्यवाद। –

+0

@kenokabe त्रुटि क्या थी, क्या आप इसे यहां दिखा सकते हैं/इसे कॉपी कर सकते हैं? –

संबंधित मुद्दे