(cdr lst)) result (iter (fun result (cadr lst)) (cdr lst)))))

(define (repeater n) (lambda (fun . args) (let iter ((i n)) (if (> i 0) (begin (apply fun args) (iter (- i 1)))))))

(define ten-times (repeater 10))

(ten-times (curry display "hello"))

Clojure (defn częściowe-zastosowanie "Zwraca funkcję, która wywołuje podaną funkcję, przekazując jej wszystkie argumenty i pozwalając na przekazawanie podczas wywoływania opcjonalnego, dodatkowego argumentu. BARDZO CZĘSTO MYLONA Z ROZWIJANIEM (CURRYING)!" ([f] f) ([f arg1 & more] (fn [& args] (apply f arg1 (concat more args)))))

(defn potwarzaj "Zwraca funkcję, która będzie wywoływała przyjmowaną jako argument funkcję tyle razy, co podana jako pierwszy argument liczba. Wywoływanej funkcji będzie przekazywany numer wywołania jako pierwszy i jedyny argument." [nr] (fn [f] (loop [c nr] (when-not (zero? c) (f c) (recur (dec c))))))

(def czterokrotnie (potwarzaj 4)) (def wypisz-siema (częściowe-zastosowanie println "siema"))

(czterokrotnie wypisz-siema)

; >> siema 4 ; >> siema 3 ; >> siema 2 ; >> siema 1 ;