我之前問過一個關於這個問題,但我不認爲我真的知道我在問什麼。我想我現在明白我的問題稍好一些。接線/箭頭列表中的每個元素與列表中的每個其他元素相同
我正在使用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