Jeśli chcesz użyć rmax
wewnątrz nmax
, pass
i fail
bez przekazania go jako arguement, trzeba umieścić go w bloku where
z generateUpTo
. W przeciwnym razie jest dosłownie "nie w zasięgu". Przykład:
generateUpTo rmax = check rmax
where
check pass = pAllSorted
check fail = error "insert multiple of 10!"
nmax = rmax `div` 10
pass = rmax `elem` mot
fail = rmax `notElem` mot
Jeśli chcesz te funkcje mają być używane w wielu miejscach, można po prostu accect rmax jako arguement:
nmax rmax = rmax `div` 10
pass rmax = rmax `elem` mot
fail rmax = rmax `notElem` mot
Uwaga - Wygląda na to również mają pewne problemy z definicją z check
... wartości i fail
są tylko argumenty check
, a nie funkcje, które zdefiniowałeś powyżej.
Aktualizacja
używać Nmax (na zewnątrz-the-gdzie-block wersji zakres), trzeba przekazać wartość Rmax do niego. Tak:
nmax rmax -- function application in Haskell is accomplished with a space,
-- not parens, as in some other languages.
Uwaga jednak, że nazwa rmax
w definicji nmax
nie jest już istotne. Funkcje te są dokładnie takie same:
nmax rmax = rmax `div` 10
nmax a = a `div` 10
nmax x = x `div` 10
Podobnie, nie trzeba nazwać ją z wartością nazwie rmax
.
nmax rmax
nmax 10 -- this is the same, assuming rmax is 10
nmax foo -- this is the same, assuming foo has your 'rmax' value.
Dla osoby, która głosuje na pytania początkowe Haskell, byłoby bardzo pomocne, gdybyś mógł wiedzieć, zostaw komentarz, dlaczego to robisz. – Phyx
będziemy go popierać! :) bardziej poważnie, doszło do dużego nadużycia dla osób pytających "zadawaj mi pracę" na temat zadań domowych, może to był błąd. – gatoatigrado
@Phyx Właściwie to staram się nie głosować na pytania dla początkujących, ale może uda mi się wyjaśnić, jak to działa. Wiele z tych pytań dotyczy określenia "zbyt zlokalizowane", a ogólnie nie jest interesujące. –