compare-moves
multimethod seemed a bit ugly to me, so I thought it would be a great opportunity to try logic programming in Clojure. Here is what I did:
1. Create a new Clojure project using Leiningen:
2. Add clojure.core.logic to project dependencies list:
3. Tell Leiningen to install the dependencies:
4. Write the rules of the rock-paper-scissors game in
src/rock_paper_scissors/core.clj
:
5. Start a REPL and play a little:
I hope you enjoy the declarative style! I surely do and will certainly continue my exploration of the awesome world of logic programming.
4 comments:
Time to run the program backwards, and generate games of RPS. :)
This was fun.
When trying to follow along, I found that clojure.core.logic has deprecated "defrel" and "fact" in favor of new syntax. I got it working with the following, using pldb/db-rel and pldb/with-db:
(ns rock-paper-scissors.core
(:refer-clojure :exclude [==])
(:require [clojure.core.logic.pldb :as pldb]
[clojure.core.logic :refer :all]))
(pldb/db-rel beats hand1 hand2)
(def facts
(pldb/db
[beats :rock :scissor]
[beats :paper :rock]
[beats :scissor :paper]))
(defn play [hand1 hand2]
(pldb/with-db facts
(doall
(run* [result]
(conde
((beats hand1 hand2) (== result :victory))
((beats hand2 hand1) (== result :loss))
((== hand1 hand2) (== result :tie)))))))
viagra asli
obat viagra
viagra original
Hey, Wow all the posts are very informative for the people who visit this site. Good work! We also have a Website. Please feel free to visit our site. Thank you for sharing.Well written article Thank You Sharing with Us project management courses in chennai | pmp training class in chennai | pmp training fee | project management training certification | project management training in chennai | project management certification online |
Post a Comment