나는이 문제에 대해 이전에 질문했지만 실제로 내가 무엇을 요구하는지 알지 못했다고 생각합니다. 나는 내 문제를 조금 더 잘 이해했다고 생각한다.목록의 모든 요소를 목록의 모든 다른 요소와 연결/ArrowLooping
화살표가있는 FRP 라이브러리 인 netwire를 사용하고 있으며이 화살표 룹 구현에 문제가 있습니다.
나는 g
기본적으로 f
을 사용하여 다른 모든 요소의 목록 주어진 목록에있는 모든 요소를 묶어
f :: ArrowLoop r => a -> r [a] a
g :: ArrowLoop r => [a] -> r() [a]
이러한 것을 가지고 ... 음 ...이 정말 있도록 단어를 사용하여 말하기 어렵다 '길이 4의 목록을 예를 들어 줄 것이다 : ([(x, [y,z]), (y, [x,z]), (x, [x,y])]
로 [x,y,z]
같은 것을 밝혀 졌, 내가 도우미 함수 selects :: [a] -> [(a,[a])]
가)
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]
가
지금 ...이 하드 코딩 된 버전을 컴파일했습니다.이 버전은 이미 작동하며 대부분 원하는 결과를 정확하게 전달합니다. 아무런 펑키가없이 실행됩니다 <>.
"정확한"일을하는 것이 가능하다면 누구와도 알 수 있습니까? 그러나 일반적인 수의 목록 요소가 있습니까?
참고로는 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