Advertisement
Guest User

Untitled

a guest
Oct 31st, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (ns lol.core
  2.   (:gen-class))
  3.  
  4. (defn return [value] (fn [state] (assoc state :value value)))
  5.  
  6. (defn satisfy [f]
  7.   (fn [state]
  8.     (let [input (:input state)]
  9.       (if (empty? input)
  10.         {:input nil :ok false}
  11.         (let [c (first input)]
  12.           (if (f c)
  13.             {:input (next (:input state)) :ok true :value c}
  14.             {:input (:input state) :ok false}))))))
  15.  
  16. (defn sym [x]
  17.   (satisfy (fn [c] (.equals c x))))
  18.  
  19. (defn >>= [parser f]
  20.   (fn [state]
  21.     (let [result (parser state)]
  22.       (if (:ok result)
  23.         ((f (:value result)) result)
  24.         result))))
  25.  
  26. (defn >>
  27.   ([p q]
  28.     (>>= p (fn [_] q)))
  29.   ([p q & more]
  30.     (reduce >> (list* p q more))))
  31.  
  32. (defn toker [xs]
  33.   (fn [state]
  34.     (let [result ((reduce >> (map sym xs)) state)]
  35.       (if (:ok result)
  36.         result
  37.         (assoc result :ok false)))))
  38.  
  39. (def pillu (>> (toker "muna") (return "LAPSI")))
  40.  
  41. (defn -main
  42.   "I don't do a whole lot ... yet."
  43.   [& args]
  44.   (println "Hello, World!"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement