문제

무엇이 잘못 되었습니까? 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)으로 게으른 기능적 또는 논리적 언어로 쓰는 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top