(letfn [(permutations [s]
(lazy-seq
(if (seq (rest s))
(apply concat (for [x s]
(map #(cons x %) (permutations (remove #{x} s)))))
[s])))])
如果我像下面那样使用循环重复,列表会被急切地评估吗?
(loop [perms (permutations chain)]
(if (empty? perms)
(prn "finised")
(recur (rest perms))))
如果需要计算它,我可以使用loop..recur来对置换
函数返回的内容进行懒洋洋的循环吗?
loop-recur代码会懒洋洋地计算列表。
你可以自己试试。让我们通过添加println
调用,使置换
每次返回值时都打印一些内容。
(defn permutations [s]
(lazy-seq
(if (seq (rest s))
(apply concat (for [x s]
(map #(cons x %) (permutations (remove #{x} s)))))
(do
(println "returning a value")
[s]))))
在使用loop
时,我们还要使用we are looping over with(prn(first perms)
打印值。
(loop [perms (permutations [1 2 3])]
(if (empty? perms)
(prn "finised")
(do
(prn (first perms))
(recur (rest perms)))))
returning a value
(1 2 3)
returning a value
(1 3 2)
returning a value
(2 1 3)
returning a value
(2 3 1)
returning a value
(3 1 2)
returning a value
(3 2 1)
"finished"
问题内容: hibernate中的property标签的lazy属性允许按照以下链接延迟加载属性:http : //docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping- declaration -属性 lazy(可选-默认为false):指定在首次访问实例变量时应延迟获取此属性。它需要构建时字节码检测
我们目前有几个@OneToOne关系,由于已知的惰性加载的限制,它们总是会急切地从反方向获取。 为了启用逆关系的延迟加载,我正在尝试启用构建时字节码检测。 到目前为止我所做的... 这些关系现在不再急切地加载...但是它们也不会延迟加载,它们只是静默地返回null。 我尝试从实体中删除接口和字段,因为我不确定是否需要这样做,在此之后,我在启动时不再获得消息,并且默认情况下返回到急切加载。 我是不是
这是一个相当做作的例子。另外,我知道flatten和concat将给出嵌套级别不同的序列。 我试图弄清楚为什么flatten似乎能打破这种懒惰,尽管我对Clojure.core代码的理解有限,但我认为并非如此。
我有一个使用服务器的小型WebSocket应用程序,我对自己感觉很好。现在我想添加不同的“房间”(列表应该是动态的)到我的应用程序,但我很难找到任何文档或示例项目。我并不害怕旋转我自己的解决方案,但依靠别人的经验是很好的。有人知道类似实现的例子吗? 2)我可以在每次打开新房间时建立一个新的套接字endpoint,并将新的URL发送回前端(或者如果房间已经打开了,则发送现有的URL),然后丢弃旧的套
问题内容: 到目前为止,这是我的project.clj文件: 和我的core.clj文件: 显示Hello World消息就好了。所以下次我尝试并获得 到目前为止,一切似乎进展顺利,所以我尝试了,然后我收到了 我在这里怎么做错了? 问题答案: 您需要向名称空间添加声明:
问题内容: 有什么方法可以在Grails / Gorm中使用懒惰属性获取?像这样 @Basic(提取= FetchType.LAZY) 注释(它也适用于左连接获取吗?) (例如,延迟加载String属性) 问题答案: 这个问题被问Grails的用户邮件列表在这里。讨论了几个不同的选项。