코너 맥브라이드의 로스 패터슨 고전 용지 Applicative programming with effects 는 'matrice'전치 예를 도시 목록 : 함수 (여기 (:)
)를 쌍으로 만들고 elementwise를 입력하고 결과로 나온 출력 목록을 생성합니다.요청 명확화
v = [[1,2,3],[4,5,6]]
주어 따라서
다음 나중에 논문에서 우리가 동일한 작업을 수행하려는 경우가 말[[1,4],[2,5],[3,6]]
에서
transpose v
결과 우리 전치 예제 우리는 (Wadler, 1985) 도서관의 '성공의 목록을'피 에 모나드을 가지고 대신
transpose'' :: [[a]] -> [[a]]
transpose'' [] = pure []
transpose'' (xs : xss) = pure (:) <*> xs <*> transpose'' xss
여기 항복 '벡터화'를 지원하는 예를 Applicative []
, pure = repeat
및 (~) = zapp
, transpose''
를 취하여야한다 리스트의 "결정적이지 않은 계산 포인트 "을 사용하고 있습니다.이 함수는 회전 입력에 함수 (여기 (:)
)를 적용합니다.
따라서
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]
에서
transpose'' v
결과는 내가 미묘한 지점을 놓치고 생각합니다. 나는 transpose
이 목록의 콜렉션 시점을 사용하여 실제로 "벡터"를 전치한다는 것을 알 수 있습니다. 그러나 transpose''
(목록의 비 결정적 계산 관점 사용)은 벡터 중첩과 아무 관련이없는 것처럼 보입니다.
즉, transpose
과 transpose''
은 서로 관련이없는 것 같습니다. 기능 - 다른 예. 내가 놓친 게 있니?
코멘트 " 우리는 도서관의 '성공 목록'을 피해야 할 것입니다. "정확히 말하면 우리는"non-det 표현의 계산 적 관점 ". –
got-thanks – haroldcarr
정확히 보여준 동작을하는'Control.Applicative'에'newtype ZipList'가 있습니다. – Xeo