Dużo to trochę off tutaj,
nthel :: Int -> [Int] -> Int
jest technicznie poprawne, naprawdę chcemy
nthel :: Int -> [a] -> a
Więc możemy to wykorzystać na listach czegokolwiek (opcjonalnie)
nthel n xs = 0
To, co właśnie powiedziałeś, brzmi "Bez względu na to, co dajesz nthel
return 0". co jest oczywiście błędne.
let xsxs = ...
To nie jest legalne haskell. let ... in ...
jest wyrażeniem, nie można go użyć.
Stamtąd nie jestem pewien, co to ma zrobić.
Może to pomoże umieścić na właściwym torze
nthelem n [] = <???> -- error case, empty list
nthelem 0 xs = head xs
nthelem n xs = <???> -- recursive case
Spróbuj wypełnienie <???>
z najlepszych odgadnięcia i jestem szczęśliwy, aby pomóc stamtąd.
Alternatywnie można użyć składni "dopasowywania wzorców" Haskella. Wyjaśniam, jak możesz to zrobić z listami here.
który zmienia nasz wyżej
nthelem n [] = <???> -- error case, empty list
nthelem 0 (x:xs) = x --bind x to the first element, xs to the rest of the list
nthelem n (x:xs) = <???> -- recursive case
Rozwiązanie to jest przydatne, ponieważ eliminuje konieczność używania jawnych head
i tail
s.
'let xsxs = take n xs' - co to ma zrobić? – Adrian