Clojure-展示软件事务内存的代码示例
我创建了一些练习来展示clojure stm的能力和功能。它们是否足够好,或者是否有更好的方式显示stm的好处 我的工作: 项目转移Clojure-展示软件事务内存的代码示例,clojure,transactions,stm,Clojure,Transactions,Stm,我创建了一些练习来展示clojure stm的能力和功能。它们是否足够好,或者是否有更好的方式显示stm的好处 我的工作: 项目转移 定义三个字符,如下所示: (def smaug (ref {:life 500, :atk 50, :def 25, :alive true, :items (set(range 100)))) (def bilbo (ref {:life 250, :atk 35, :def 12, :alive true, :items ()})) (def gandalf
(def smaug (ref {:life 500, :atk 50, :def 25, :alive true, :items (set(range 100))))
(def bilbo (ref {:life 250, :atk 35, :def 12, :alive true, :items ()}))
(def gandalf (ref {:life 300, :atk 27, :def 8, :mana 50, :alive true, :items ()}))
:items
从一个角色转移到另一个角色,启动两个线程,一个用于bilbo,一个用于gandalf,让两个线程将:items
从smaug转移到bilbo和gandalf,直到smaug没有:items
为止(dosync
@(future (dosync
(alter bilbo update-in [:items] conj (first (get @smaug :items)))
(alter smaug update-in [:items] disj (first (get @smaug :items)))))
(alter gandalf update-in [:items] conj (first (get @smaug :items)))
(alter smaug update-in [:items] disj (first (get @smaug :items))))
:atk
值减去防御者的:def
值将从防御者的:life
值中减去。每场战斗只有一名攻击者和一名防御者。
现在,让其中一个角色与smaug
战斗,如果一个角色打败了smaug,他将获得所有:物品。请记住:生命值永远不能小于0!!!
如果字符的:life
值为0,则该字符为死字符。因此,:alive
值设置为false
gandalf
可以治愈其他角色。但首先,您必须实现一个函数,它让gandalf
healbilbo
。因此,:寿命
值增加。同时治疗减少了甘道夫的法力。如果他的:法力达到0,他可以;我无法痊愈。现在,让甘道夫在每次战斗后治愈比尔博。现在两个角色都参与了战斗,他们都将从smaug
接收:items
。请记住,:mana
值不应小于0Bilbos
:life
值也不应小于0
比尔博
和甘道夫
的:atk
值。
现在实施日周期。要表示白天,请将整数值定义为ref
。该值应在单独的线程中每秒更新一次。因此,attle和day循环由单独的线程执行。每次更新都会将一天的时间增加1。最大值为23。
如果是第6-17天,比尔博和甘道夫将获得其:atk
价值的1/3奖金。在晚上(18-5),他们得到1/3的负奖金斯穆格、比尔博、甘道夫——这不是取自181ff页吗?如果是,为什么不检查一下这本书呢?是的,它来自这本书,但是我的问题没有答案。但是我想听听其他的观点,我读了几遍,发现了代码片段中的语法错误,绞尽脑汁,最后我仍然在想:问题是什么?问题在哪里?如果只是
,那么它们(示例)足够好吗?
-您没有真正为部分提供。你在寻找什么样的答案?问题是这些例子是否足够好,可以向试图进入这门学科的人总结stm的功能?