2013-04-01 11 views
10

próbowałem napisać 3-4, gdzie oświadczenie w jednej funkcji, ale ja dostać błąd i nie mógł tego zrobić, próbowałem zrobić coś takiego:jest jakiś sposób na wielokrotność gdzie oświadczenie w Haskell

foo x= 
| x == foo1 = 5 
| x == foo2 =3 
| x == foo3 =1 
| otherwise =2 
where foo1= samplefunct1 x 
     foo2= samplefunct2 x 
     foo3= samplefunct3 x 

Wiem, że kod jest trochę bezużyteczny, ale napisałem to, żeby dać przykład, o co mi chodzi.

Czy jest ktoś, kto może mi pomóc? Z góry dziękuję.

+2

Nie powinno być '=' after 'foo x'. – gspr

+0

@ gspr tak, bardzo ci przykro z tego powodu, ale myślę, że to nie było prawdziwe pytanie. –

+5

Sugeruję również, aby w przyszłości uwzględnić każdy błąd. Po prostu mówienie ludziom, że "dostałeś błąd", nie jest konstruktywne. – gspr

Odpowiedz

18

Usuń = po foo x i wcięcia kodu jak

foo x 
    | x == foo1 = 5 
    | x == foo2 =3 
    | x == foo3 =1 
    | otherwise =2 
    where foo1 = samplefunct1 x 
      foo2 = samplefunct2 x 
      foo3 = samplefunct3 x 

i jesteś w porządku.

+0

Kiedy napisałem cos takiego jak ja dostać błąd mówiąc „błąd składni w wejściu (nieoczekiwany' = ') ”mój gdzie część stwierdzenie jest \t | inaczej = (-1, -1) \t gdzie rightk = rightCheck obszar numer leftk = leftSprawdź numer obszaru , a po usunięciu jednej z instrukcji where, działa poprawnie. –

+0

Czy na pewno Twoje spacje są poprawne? Trudno powiedzieć, co masz na myśli mówiąc "jak" mój. To, co wkleiłem, nie ma błędów w składni. – gspr

+0

Ah, w tym przypadku wygląda na to, że Twój kod może bardzo różnić się od tego, który wkleiłeś powyżej. Włączenie rzeczywistego kodu może pomóc. – gspr

8

Ten kod jest prawie prawidłowy, po prostu potrzebujesz poprawnego wcięcia: Biała spacja ma znaczenie w haskell. Ponadto użycie = po foo jest błędem dla strażników, więc musisz to również usunąć. Wynikiem jest:

foo x 
    | x == foo1 = 5 
    | x == foo2 =3 
    | x == foo3 =1 
    | otherwise =2 
    where foo1= whatever1 x 
     foo2= whatever2 x 
     foo3= whatever3 x 
+0

dziękuję, ale chcę użyć 3 różnych funkcji w każdym oświadczeniu where.As możesz zobaczyć z mojego kodu pierwszy, gdzie działa z samplefunc1 i drugi działa z samplefunct2 i tak dalej, jesteś pewien, że jest okey z tym? –

+1

Tak, właśnie użyłem "id", więc skompilowałem, nie ma znaczenia, co tam trzymasz – jozefg

+0

Edytowałem, aby było wyraźniej – jozefg

7

Jeśli wcięcie jest nieco nierówna, podobnie jak to:

foo x 
| x == foo1 = 5 
| x == foo2 =3 
| x == foo3 =1 
| otherwise =2 
where foo1= samplefunct1 x 
     foo2= samplefunct2 x 
     foo3= samplefunct3 x 

wtedy rzeczywiście, mówi się komunikat o błędzie nieoczekiwany = (aw przyszłości, proszę zawierają pełny komunikat o błędzie w treści pytania).

naprawić ten błąd przez ponowne wyrównywanie lub { ; }:

foo x 
| x == foo1 = 5 
| x == foo2 =3 
| x == foo3 =1 
| otherwise =2 
where { foo1= samplefunct1 x ; 
     foo2= samplefunct2 x ; 
      foo3= samplefunct3 x } 

działa poprawnie (nie, że jest to miły styl do wykorzystania). Czasami nawet wygląda na Ciebie, ale nie jest, jeśli niektóre znaki tabulacji są ukryte w białej przestrzeni.

Powiązane problemy