(defn- return-results [& rs] {"results" (map str rs)}) (defn- deliver-promises [& args] {"deliverances" (apply hash-map (flatten (map (fn [[k v]] [k (str v)]) (partition 2 args))))}) (defn- s-to-i [s] (java.math.BigInteger. s)) (defn fibo ([n] {"tasks" [{"code" (format "(fibo %d p)" n) "promises" {"p" "a"}} {"code" "(return-results p)" "prereqs" ["a"] "promises" {"p" "a"}}]}) ([n p] (if (< n 3) {"deliverances" {p "1"}} {"tasks" [{"code" (format "(fibo %d p)" (dec n)) "promises" {"p" "a"}} {"code" (format "(fibo %d q)" (dec (dec n))) "promises" {"q" "b"}} {"code" "(deliver-promises r (apply + (map s-to-i [p q])))" "prereqs" ["a" "b"] "promises" {"p" "a" "q" "b" "r" p}}]})))