문제
무엇이 잘못 되었습니까? rs
첫 번째 섹션에서 정의?
palindrome :: [a] -> [a]
palindrome xs = con xs rs
where con a b = rev (rev a []) b
rs = rev xs -- here
where rev [] rs = rs
rev (x:xs) rs = rev xs (x:rs)
나는 단지 Haskell을 배우고 있지만 구문 규칙은 나를 혼란스럽게합니다. 오류 메시지는입니다
[1 of 1] Compiling Main ( pelindrome.hs, interpreted )
pelindrome.hs:5:8: parse error on input `rs'
해결책
당신의 들여 쓰기는 잘못되었고 나는 당신이 하나만 가질 수 있다고 생각합니다 where
거기에서 (나는 아주 잘못 될 수 있습니다. 나는 Haskell 사람이 아닙니다). 전화에 대한 논쟁도있었습니다. rev
(빈 목록) :
palindrome :: [a] -> [a]
palindrome xs = con xs rs
where con a b = rev (rev a []) b
rs = rev xs [] -- here
rev [] rs = rs
rev (x:xs) rs = rev xs (x:rs)
main = print (palindrome "hello")
인쇄 :
"helloolleh"
나는 지금 그것을 이해하려고 노력할 것이다. 어쨌든 재미있게 보내세요!
편집 : 지금 나에게 완벽하게 이해됩니다. 나는 그것이 올바른 버전이라고 생각합니다. Haskell Indentation Rules의 경우 읽으십시오 Haskell Indentation
다른 팁
@litb : CON을 다시 작성할 수 있습니다
palindrome :: [a] -> [a]
palindrome xs = con xs rs
where con [] b = b
con (x:xs) b = x:con xs b
rs = rev xs [] -- here
rev [] rs = rs
rev (x:xs) rs = rev xs (x:rs)
Prelude에서 ++가 구현되는 방법입니다. 이전 버전은 테일 콜 패션 (예 : Erlang)으로 게으른 기능적 또는 논리적 언어로 쓰는 방법입니다.
제휴하지 않습니다 StackOverflow