Clojure - Seqüencia Lazy V35852


Statement
 

pdf   zip

Recordeu la definició circular de llistes "infinites" que vam veure a classes de laboratori?

(def naturals (lazy-seq (cons 0 (map inc naturals)))) 
(def factorials (lazy-seq (cons 1N (map * factorials (iterate inc 1N)))))

Ara suposem que tenim una funció ff que serveix per definir una seqüència a0,a1,a2a_0, a_1, a_2\ldots on:

a0=1a_0 = 1

an+1=f(an)a_{n+1} = f(a_n)

Així doncs, la seqüència és a0,f(a0),f(f(a0)a_0, f(a_0), f(f(a_0)\dots.

Definiu ara una llista "infinita", anomenem-la seq-general, amb els elements de la seqüència a0,a1,a2a_0, a_1, a_2\ldots fent servir aquesta tècnica de la definició circular. És a dir, cal que definiu seq-general tal que la seva definició tingui la forma:

(def seq-general ...transformació, que inclou f, de la mateixa llista seq-general)

Observacions

Afegiu el codi (deffidentity)(def f identity) en el vostre codi per a que funcioni l’enviament.

Public test cases
  • Input

    (def f inc)
    (take 5 seq-general)
    

    Output

    #'user/f
    (1 2 3 4 5)
    
  • Information
    Author
    Jordi Delgado / Gerard Escudero
    Language
    Catalan
    Official solutions
    Clojure
    User solutions
    Clojure