현재 하스켈을 둘러보고 있습니다. 하스켈 (그리고 함수 언어)에 대한 나의 지식은 여전히 낮지 만 나는 그것에 대해 연구 중이다. 정말로 나를 귀찮게하는 것은 단순한 작업 인 깊이 당 1 배의 중첩 목록 접기입니다.하스켈 폴딩 중첩리스트
fcalc = foldr (\x y -> (foldr (**) 1 x) * (foldr (**) 1 y)) [1.0, 1.0] [[2.0, 3.0], [4.0, 5.0]]
: 2^3 * 4^5 여기서 ^는 람다 폴드에 의해 수행됩니다. 슬프게도 작동하지 않습니다.
Occurs check: cannot construct the infinite type: t0 = [t0]
In the third argument of `foldr', namely `y'
I는 주로 변수가 예로서 이용 된 것을 나타내는 소정의 "무한 형"오류에 대한 비트를 읽은 요소 대신 목록이었습니다. 이것은 나를 바깥 접기의 두 번째 매개 변수를 문제로 생각했지만 성공하지는 못하게했다. 나는 그것을 얻지 못한다. :/
글쎄, 난 궁금해 이것에 대해 잘못된 방향으로가는 것은 아닙니다. 무엇보다도, 당신은 나의 엄지 손가락 법칙 중 하나를 깨고 있습니다. 문제를 직접 해결하기 위해 접기를 사용하지 않고, 문제를 해결하기 위해 중간 추상화를 구현하는 데 사용합니다. 둘째, 목록 및 중첩 목록이 실제로 수행하려는 작업에 적합한 데이터 구조인지 궁금합니다. 일종의 추상 구문 트리가 제공하는 문제 영역을 더 잘 처리하고 있다는 느낌이 들게됩니다. –