2012-03-15 9 views
16

Wiem, że nie posiadają dopasowania wzorców (tzn. Trzeba przepisać klauzulę "gdzie" dla każdego wzorca), ale jak działa ustalanie zasięgu dla strażników?W Haskell, jaki jest zakres klauzuli where w kontaktach ze strażnikami?

np. czy to działa?

myFunction x1 x2 
    | x1 > x2 = addOne x1 
    | x1 < x2 = addOne x2 
    | otherwise = x1 
     where addOne = (1+) 

A może to być to?

myFunction x1 x2 
    | x1 > x2 = addOne x1 
     where addOne = (1+) 
    | x1 < x2 = addOne x2 
     where addOne = (1+) 
    | otherwise = x1 

Odpowiedz

16

Pierwsza z nich jest prawidłowa. Sugerowałbym, żebyś rzucił okiem na stronę let vs where na wiki haskell, to dobra lektura (i wyjaśnia także, jak radzić sobie z określaniem zakresu). Podobnie jak uwaga, nigdy nie powinieneś powtarzać tych samych definicji ... to znak, że twój kod musi być skonstruowany w inny sposób.

5

Zakres klauzuli where to całe równanie, więc Twój pierwszy przykład działa.