我一直在尝试为Scala创建功能反应式编程框架.目前我很困惑的一件事是当前的实现如何处理在顶层表示行为.为了解释我的意思,我将举一个例子.说我有一个JPanel,我想这样做:
JPanel panel = new Panel()
panel.setBackground(new Behaviour(time => Color.red))
Run Code Online (Sandbox Code Playgroud)
虽然这里的颜色是静态的,但我们希望在行为更新值时更新面板背景.到目前为止,我完成它的方法是使用事件(通过changes行为上的函数可访问)基本上创建一个离散化的行为.这基本上只是行为发生变化时发生的事件源.使用这个setBackground的实现在这里:
def setBackground(color : Behaviour[Color]) {
super.setBackground(color.now)
color.changes.each(change => super.setBackground(change))
}
Run Code Online (Sandbox Code Playgroud)
这感觉有点乱.有没有人有任何关于这是否是一个坏方法的建议?我今天一直在关注Elliott的Push-Pull FRP,感觉我可能会朝着正确的方向前进但却迷失在某个地方.
编辑:如果没有人有明确的明确解决方案,那么想法/想法会很棒!
user-interface programming-languages functional-programming scala frp
我想在OSX上用Haskell创建一个GUI应用程序.它主要应该是在画布上绘画.我尝试了以下选项,但没有一个工作:
还有其他选择吗?
我在 Real World Haskell 上遇到了以下句子:
懒惰的评估有一些令人毛骨悚然的效果。假设我们要查找未排序列表的 k 个最小值元素。在传统语言中,显而易见的方法是对列表进行排序并取前 k 个元素,但这很昂贵。为了提高效率,我们将编写一个特殊的函数,一次性获取这些值,并且它必须执行一些中等复杂的簿记。在 Haskell 中,先排序再取的方法实际上表现良好:懒惰确保列表只会被排序到足以找到 k 个最小元素。
他们为此提供了一个代码实现:
minima k xs = take k (sort xs)
Run Code Online (Sandbox Code Playgroud)
但真的是这样吗?我认为即使在 Haskell 中,它也应该做一个完整的列表来取出k元素。(想象一下在列表末尾有最小的数字)。我在这里错过了什么吗?
它的倒数似乎有可能.因为我想象列表是产品并且->是取幂,
(a*a*a...)^r = (a^r)*(a^r)....
既然我们可以定义逆,[a->r] -> a -> [r]那么不应该定义它吗?