的所有第一,我有一个MySQL表是这样的:如何在Clojure中最多执行N次函数?
create table t (id int(11) PRIMARY KEY unsigned NOT NULL AUTO_INCREMENT, name varchar(20), age int(10));
我定义了一个funtion将在T创建一个行:
(require '[honeysql.core :as sql])
(defn do-something []
(sql/query {:insert-into :t
:values [{:name "name1" :age 10}]})
(> 3 (rand-int 5)))
现在我想运行此功能直到它返回真,但最多N次。
这个take-times
代码是错误的,因为重复将一次评估do-something
函数,然后构造惰性序列。
(defn take-times []
(some true? (repeat 5 (do-something))))
这take-times2
将EVAL的do-something
5倍不管什么do-something
回报。
(defn take-times2 []
(some true? (for [i (range 5)]
(do-something))))
如果我不使用递归函数和宏,该怎么办?
这可以用一个数字累加器被简化'(FN [NV](如果(或V(> = ACC MAX-假))(减小V BE测试)(inc acc))'0作为初始条件 – noisesmith 2014-10-30 18:31:02
哦,你使用的方式减少意味着truthy值永远不会返回 – noisesmith 2014-10-30 18:32:06
我没有把这段代码看做有用的东西,它只是一个例子,可以重新插入sql插入等。数字累加器的第一个评论将是一个更好的例子,为此目的。 – GregA100k 2014-10-30 19:01:32