C'è molto che è un po 'fuori qui,
nthel :: Int -> [Int] -> Int
è tecnicamente corretto, in realtà vogliamo
nthel :: Int -> [a] -> a
modo che possiamo utilizzare questo su liste di qualsiasi cosa (opzionale)
nthel n xs = 0
Quello che hai appena detto è "Non importa quello che dai a nthel
restituisci 0". che è chiaramente sbagliato.
let xsxs = ...
Questo haskell non è legale. let ... in ...
è un'espressione, non può essere utilizzata in toplevel.
Da lì non sono veramente sicuro di cosa dovrebbe fare.
Forse questo vi aiuterà a mettere sulla strada giusta
nthelem n [] = <???> -- error case, empty list
nthelem 0 xs = head xs
nthelem n xs = <???> -- recursive case
riempimento Prova nella <???>
con la tua ipotesi migliore e sono felice di aiutare da lì.
In alternativa è possibile utilizzare la sintassi di "corrispondenza del modello" di Haskell. Spiego come puoi farlo con gli elenchi here.
che cambia il nostro sopra per
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
Fare questo è a portata di mano in quanto nega la necessità di utilizzare espliciti head
e tail
s.
'let xsxs = take n xs' - cosa si deve fare? – Adrian