dnes to bylo zase zabavne. Pouze ten Vas zpusob vypoctu e me ponekud boli a privadi na otazku, za-li Closure umi i neco jako pevne body v lambda kalkulu. Bylo by mozne napsat toto?
(def f (for [x (cons (cons 1 1) f)] (cons (* x y) (+ y 1)) ))
(apply + (take 1000 (for [x f] (/ 1 (car x))))
Jde mi o to jestli je mozne predpocitat posloupnost faktorialu f tak ze pro novy prvek vyuziju jsi vypoctene prvky f.
Pokud si dobre pamatuji tak v Haskellu neco takoveho jde.
Jde mi o to jestli je mozne predpocitat posloupnost faktorialu f tak ze pro novy prvek vyuziju jsi vypoctene prvky f. Pokud si dobre pamatuji tak v Haskellu neco takoveho jde.
V Haskellu lze použít funkci scanl
a psát scanl (*) 1 [1..]
. Výpočet posloupnosti aproximací pak vypadá takto:
scanl (+) 0 $ map ((1/) . fromIntegral) $ scanl (*) 1 [1..]
Hmm mozna to ani neni zapotrebi resit pres cons apod. ale vytvorit si lepsi generator sekvence, ktery si bude pamatovat predchozi vysledek, takze v kazde iteraci provede jen jedno nasobeni. AFAIK muze byt sekvence takto udelana, i kdyz je samozrejme na kazdem vyvojari, jak se popere s imutabilitou :-)))
Je to souslovi "generatorova notace seznamu" uz nejak oficialne do cestiny prejato? Taky by me asi nebavilo porad psat 'list comprehension', kdyz navic malokdo zna vsechny vyznamy slova 'comprehension', ale aby to nebylo kazda knizka/skripta jinej preklad do cestiny :-)
I kdyz popravde - C++ ani Java nic takoveho neumi, takze tim se skrta 90% ceskych knizek o programovani...
> Zajímavé bude zjistit, kdy přesně vlastně k vytvoření výsledného seznamu dochází. K tomu můžeme použít funkci s vedlejším efektem – výpisem nějaké informace na standardní výstup. Tato funkce může vypadat následovně:
Myslim ze toto by bolo zaujimavejsie ukazat cez Monady (hoci Monady su sami o sebe temou na samostany serial):
http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb
No a ked uz sme pri tema Monady:
> Makro for, pomocí něhož je v jazyce Clojure implementována generátorová notace seznamů, má poměrně široké možnosti použití a při jeho zápisu lze dokonce použít i některé modifikátory, s nimiž se seznámíme v navazujících kapitolách.
Akurat som sa docital ze makro for je sucasne aj Monad:
One of the most frequently used monads is the sequence monad (known in the Haskell world as the list monad). It is in fact so common that it is built into Clojure as well, in the form of the for form. Let’s look at an example:
(for [a (range 5)
b (range a)]
(* a b))
http://onclojure.com/2009/03/06/a-monad-tutorial-for-clojure-programmers-part-2/