我之前问过一个关于这个问题,但我不认为我真的知道我在问什么。我想我现在明白我的问题稍好一些。接线/箭头列表中的每个元素与列表中的每个其他元素相同
我正在使用netwire,箭头化的FRP库,并且在实现此arrowloop时遇到了一些麻烦。
我
f :: ArrowLoop r => a -> r [a] a
g :: ArrowLoop r => [a] -> r() [a]
这样g
基本上捆绑使用f
与所有其他元素的列表中给出的列表中的每个元素......嗯......这是很难用语言真的这么说我“我要给一个例如具有长度为4的列表:
g [x0, x1, x2, x3] = proc _ -> do
rec
y0 <- f x0 -< [y1, y2, y3]
y1 <- f x1 -< [y0, y2, y3]
y2 <- f x2 -< [y0, y1, y3]
y3 <- f x3 -< [y0, y1, y2]
returnA -< [y0, y1, y2, y3]
(I有一个辅助函数selects :: [a] -> [(a,[a])]
,,轮流类似[x,y,z]
成[(x, [y,z]), (y, [x,z]), (x, [x,y])]
)
现在...我编译了这个硬编码版本,这已经可以正常工作,并提供了我主要想要的结果。它运行时没有任何时髦的问题。
有谁知道是否可以做到这一点“确切”的事情......但有一个列表元素的一般数量?
仅供参考,我的执行selects
来自西蒙·马洛,
selects :: [a] -> [(a,[a])]
selects = go []
where
go xs [] = []
go xs (y:ys) = (y,xs++ys) : go (y:xs) ys
编译;我很抱歉,我不能说任何话,因为它最终因为某种原因而工作(我在计算中得到了很多NaN)。如果你愿意,我可以得到一些简单的网线,也许你可以从那里去看看它为什么不起作用?然而,我感谢你的帮助。 –
是的,如果你可以包含一些与你的硬编码'g'和一些简单的可运行'main'一起工作的例子,我会很乐意进一步调试它。 – shang