Korzystanie krotki jako parametry, jak to nie jest powszechne w SML. Zwykle byłoby użyć currying i określić swoją funkcję tak:
let get_nth list n = ...
Miałoby to podpis 'a list -> int -> 'a
. Zauważ też, że masz tutaj pewien parametr 'a
, co oznacza, że nie ma prawdziwego powodu, aby ograniczać swoją funkcję do samych int.
Teraz spójrzmy na problem. Jeśli chcesz uzyskać element zerowy, jak powinna wyglądać twoja funkcja?
let get_nth list 0 = List.head list (* this is not actually valid in OCaml *)
teraz jeśli masz funkcji, aby uzyskać n-ty element z listy elementów M (NB n> m), w jaki sposób można wykorzystać tę funkcję, aby zbudować inną funkcję, które uzyskać to n + 1-ej od A lista elementów m + 1? Pozwól, że funkcja n + 1 pierwiastków być get_nth'
let get_nth' list n' = get_nth (List.tail list) (n'-1)
Teraz wszystko, co musisz zrobić, to połączyć dwa i gotowe. Zostawię ci ostatnią część.
Jeśli zastosujesz się do tej porady, otrzymasz coś, co jest bardziej skomplikowane, niż musi być. Jednak łatwiej jest zrozumieć, co dzieje się w ten sposób.
To naprawdę brzmi jak zadanie domowe. Pomogłoby to, gdybyś pokazał kod, który wypróbowałeś, a który nie działa tak, jak ci się wydawało. –