Clojure - Seqüencia Lazy V35852


Statement
 

pdf   zip

thehtml

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ó f que serveix per definir una seqüència a0, a1, a2… on:

a0 = 1

an+1 = f(an)

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

Definiu ara una llista "infinita", anomenem-la seq-general, amb els elements de la seqüència a0, a1, a2… 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 (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