Wątek przeniesiony 2018-09-15 10:05 z Java przez kq.

Clojure alternatywa Javy zadania

0

Potrzebuję pomocy z Clojure'a. Ktoś pomoże napisać te zadania w CLOJURE ??

    Zadanie 1.

Zrealizować w wybranym języku programowania wyznaczanie pierwiastka 3-go stopnia z podanej liczby.
Zadanie 2.
a. Wyznaczyć dokładny wzór opisujący ilość kroków niezbędnych do obliczenia Fib(n)
b. Zaproponować wersję rekurencyjną powyższej procedury, która generuje proces iteracyjny
c. Zastosować rekurencję krańcową i policzyć wartość powyższej procedury dla n = 100000
Zadanie 3.
a. Niech f i g będą dwoma funkcjami jednoargumentowymi. Złożenie f z g jest określone jako funkcja x f(g(x)). Zdefiniuj procedurę złóż → implementującą złożenie funkcji. Przykładowo: ((złóż kwadrat inc) 6) → 49
b. Jeśli f jest funkcją jednoargumentową określoną na liczbach a n jest dowolną liczbą naturalną, to n-krotnym złożeniem funkcji f nazywamy funkcję, której wartością jest wynik n-krotnego zastosowania funkcji f: x f(f( ... (f(x)) ...)) → Napisz procedurę realizującą n-krotne złożenie funkcji f wykorzystując rozwiązanie z punktu c.
Zadanie 4.
Napisz procedurę wyznaczającą zbiór potęgowy podanej kolekcji liczb

0

```Zadanie 1.
(defn pierw [liczba stopien]
  (loop [result liczba
         tmp (exp result (- stopien 1))]
        (let [nextresult (* (/ 1.0 stopien) (+ (* (- stopien 1) result) (/ liczba tmp)))]
          (if (< (abs (- nextresult result)) 1e-7)
            result
            (recur nextresult (exp nextresult (- stopien 1)))))))

Zadanie 2 b.
(defn fib [x]
  (loop [a 0 b 1 i x]
    (if (= i 0)
      a
      (recur (+ a b) a (dec i)))))

Zadanie 2 c.
(defn fib-rec [x]
  (if (> x 1)
    (loop [n 1 f0 0 f1 1]
      (if (< n x)
        (recur (inc n) f1 (+' f0 f1))
        f1))
    x))

Zadanie 3 a.
(def zloz
  (fn [function2 function1]
    (fn [argument] 
      (function2 (function1 argument)))))

Zadanie 3 b.
(def powiel
  (fn [function n]
    (fn [argument]
      (loop [i n a (bigint argument)]
        (if (zero? i)
        a
        (recur (dec i) (function a)))))))

Może ktoś to zweryfikować i podpowiedzieć co do zadania 4 i 2a?
0

To byłaby dla mnie funkcja rekurencyjna generująca proces iteracyjny:

(defn my-fib-recur [n]
  (defn fib-helper [a, b, i]
    (if (zero? i)
        b
        (fib-helper (+ a b) a (- i 1))))
      (fib-helper 1 0 n))

Na przykład w Scheme, Scali, czy Haskellu, by to zadziałało, w Clojure się wywali .A potem bym ja zoptymalizował, tak jak Zrobiłeś. Co do pierwszego to pytanie czy działa? Jak działa to OK:)
Złożenie jest dobre. Złożenie złożeń, co Ci daje dla: ((powiel * 2) 2)? Powinno być cztery.
Ile razy sie wywołuje Fibonacci? Jak Liczysz rekurencyjnie, to sobie Narysuj drzewko, to Zobaczysz ile razy, a iteracyjnie, to wiadomo. Więcej tutaj
EDIT: powiel powinno używać funkcji zloz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1