제목에서 설명한대로 각 짝수 및 홀수를 해당 값으로 변환 할 수 있지만 입력 한 데이터는 쉼표가 붙었 어. 어떤 추가 L[]
만듭니다. 제게 기대되는 결과를 보여 드리겠습니다.목록 내의 짝수를 1로, 0을 내기 위해 확률을 변환하십시오. 쉼표로 버그를 작성하십시오.
예상 결과>binariza (L [E 1,L [E 2,E 3],E 4]) => L [E 0,L [E 1,E 0],E 1]
내 결과>binariza (L [E 1,L [E 2,E 3],E 4]) => L [E 0,L [L [E 1,L [E 0,L []]],L [E 1,L []]]]
여기 내 코드는 사람이 어떻게 L[]
에 쉼표가 발견 될 때마다 모든 캡슐화 방지하는 나를 설명 할 수있다.
data LA e = L [LA e] | E e deriving Show
binariza :: LA Integer -> LA Integer
binariza (L[]) = L[]
binariza (E num) =
if (even num) then
E 1
else
E 0
binariza (L (x:resto)) =
L [(binariza x), (binariza (L resto))]
참고 : 내 솔루션은 재귀 적이어야합니다.
감사합니다. @jamshidh! 나는 조언이나 설명만을 찾고 있었다. 제가 질문을 가지고 있지만지도를 사용하면 재귀 적으로 만들지 않을 것입니다. "map (짝수 또는 홀수이면 값을 0 또는 1로 바꿉니다.) L [...]". 당신이 나를 안내 할 수 있다면 어떻게 재귀가 될 수 있겠습니까 –
binariza는 binariza를 호출하기 때문에 재귀 적입니다. 요점은 binariza가 트리 아래까지 계속 적용된다는 것입니다. 위의 마지막 경우를 변경하면 재귀는 여전히 매우 명확합니다. – jamshidh
이 오류가 계속 발생합니다. "예상 유형 'LA Integer' '[LA Integer]'실제 유형과 일치 할 수 없습니다." " 처음에는 "맵 함수 목록"을 존중하고 있었지만 맵을 어디에 두 었는지에 따라이 오류가 발생했습니다. "실제 유형 'LA Integer'로 예상되는 유형 '[LA Integer]'와 일치 할 수 없습니다. 당신은 왜 설명해 주시겠습니까 –