永远的monad如何工作?
forever :: (Monad m) => m a -> m b
forever a = a >> forever a
Run Code Online (Sandbox Code Playgroud)
如果我写
main = forever $ putStrLn "SAD, I DON'T UNDERSTAND!"
Run Code Online (Sandbox Code Playgroud)
永远得到IO(),这不是函数,怎么能永远反复调用putStrLn?
Clojure有许多用于生成测试的库,例如test.check,test.generative或data.generators.
可以使用更高阶函数来创建可组合的随机数据生成器,例如:
(defn gen [create-fn content-fn lazy]
(fn [] (reduce #(create-fn %1 %2) (for [a lazy] (content-fn)))))
(def a (gen str #(rand-nth [\a \b \c]) (range 10)))
(a)
(def b (gen vector #(rand-int 10) (range 2)))
(b)
(def c (gen hash-set b (range (rand-int 10))))
(c)
Run Code Online (Sandbox Code Playgroud)
这只是一个示例,可以使用不同的参数,过滤器,局部等进行修改,以创建非常灵活的数据生成功能.
是否存在任何生成库可以做的事情,而不仅仅是(或更多)通过编写一些更高阶函数可以简洁地实现?
作为stackoverflow众神的旁注:我不相信这个问题是主观的.我不是要求哪个库更好.我想知道任何/所有数据生成库的哪些特定特征或技术将它们与组成香草高阶函数区分开来.一个示例答案应该说明使用任何库生成随机数据,并解释为什么通过以上面说明的方式组合HOF来做更复杂的事情.
通常,|| 意味着或者,但在这种情况下它意味着什么:
function getCharCount ( e,s ) {
s = s || ",";
return getInnerText(e).split(s).length;
}
Run Code Online (Sandbox Code Playgroud) 新的,我知道当你调用gtk.main时程序应该进入无限循环.当调用self.quit时,gtk.main中的循环将中断.
但我需要另一个循环活动,它将检查日志文件的更改,并不断更新更改,进入gtk.Textbuffer,以显示在gtk.Textbox中.那么在哪里可以在以下代码中添加此循环.
class MessageBox:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("mbx.glade")
self.window = builder.get_object("window")
dic = { "on_buttonSend_clicked" : self.sendmsg,
"on_entry_activate" : self.sendmsg,
"on_buttonWhois_clicked" : self.sendwhois,
"on_buttonIdleTime_clicked" : self.sendidletime,
"on_window_destroy" : self.exitfunc}
builder.connect_signals(dic)
self.entry = builder.get_object("entry")
self.display = builder.get_object("display")
self.displaybuff=self.display.get_buffer()
def exitfunc(self, widget):
def sendmsg(self, widget):
def sendwhois (self, widget):
def sendidletime (self, widget):
if __name__ == "__main__":
msgbox = MessageBox()
msgbox.window.show()
gtk.main()
Run Code Online (Sandbox Code Playgroud)