2013-03-29 18 views
7
pow1 b e 
| (e == 0) = 1 
| otherwise = b * pow1 b (e-1) 

Mam dokładnie ten kod w pliku .hs i podczas ładowania zawsze otrzymuję taki sam błąd analizy. Nie sądzę, żeby rzeczywiście zawierał błędy - więc moją obecną myślą jest to, że "|" nie jest to znak, którego chce haskell, ale jest standardowy na mojej klawiaturze Macbooka (z Mac OS). Czy to możliwe, a jeśli tak, to jak mam to obejść? Obecnie używam TextEdit do napisania kodu, z włączonym ustawieniem zwykłego tekstu.Haskell - analiza błędu na wejściu `| '

+2

Bardzo polecam używanie dobrego edytora dla Haskella (Vima, Emacsa, Sublime Text 2) zamiast TextEdit. –

Odpowiedz

14

Pamiętaj o wcięciu osłon; Haskell ma znaczące białe znaki.

pow1 b e 
    | (e == 0) = 1 
    | otherwise = b * pow1 b (e-1) 
+3

I dodać: wcięcie ze spacjami, * nie * zakładki. (np. upewnij się, że twój edytor konwertuje tabulatory na spacje). – huon

+2

Haskell ma znaczące białe znaki, * chyba że * chcesz napisać swój kod z nawiasami wszędzie – amindfv

5

Wszystko, co musisz zrobić, to dodać spacje przed strażnikami, a kod zadziała poprawnie.

pow1 b e 
    | (e == 0) = 1 
    | otherwise = b * pow1 b (e-1) 

(user142019 już wspomniano to rozwiązanie jednak, że filc jest konieczne wyjaśnienie rozumieć roztwór)

Objaśnienie:

Haskell wykorzystuje przestrzeń-wgłębienia do kontroli struktury i zakresu to jest kod. Inne języki programowania (na przykład Java) polegają na nawiasach klamrowych, zamiast tego Haskell ma wcięcia.

Twój kod nie działa, ponieważ Haskell spodziewa się, że treść funkcji będzie na głębszym poziomie wcięcia niż definicja funkcji i inne definicje funkcji na tym samym poziomie. Każda nowa linia na tym samym poziomie wcięcia będzie próbowała być interpretowana jako nowa definicja funkcji, której nie wolno uruchamiać z ochroną |, stąd otrzymujemy błąd analizy.

Nie ma nic złego w używaniu klawisza Mac ani w edytorze tekstu.

Na temat wcięć: zakładki nie będą działać. Będziesz musiał wprowadzić spacje ręcznie lub zmienić ustawienia tabulatora w edytorze, aby wstawić 4 spacje (polecam) zamiast tabulatora. (Notepad ++ pozwala na to na przykład, jest to mój preferowany wybór do użycia z Haskellem).

Powiązane problemy