Здравствуйте, я новичок в SML, и я пытался написать функцию, которая получает в качестве параметра список (в моем случае - список пруссий), который имеет кортежи с двумя целыми числами и строку, моя функция должна создатьсписок со всеми годами, которые появляются в списке без повторений (2-й элемент каждого кортежа списка). Я должен сделать это, создав две функции (append_if_new берет год из списка и добавляет его в список, это работает), и год должен сделать это для всех кортежей в списке, я попробовал это с помощью foldl, но я получил Tyconнесоответствие.
Pd. чтобы сделать это, мне нужно использовать карту функций, фильтр или сложить, и я могу переместить функциональные возможности append_if_new в функцию year. Я думаю, что ошибка в вызове сгиба, где функция, которую я передаю как параметр, не является типом функции, которую я должен передать, но я не уверен, в чем проблема. Спасибо
val prussia =
[(0,1875,"G"),(2,1876,"G"),(2,1877,"G"),(1,1878,"G"),(0,1879,"G"),
(0,1880,"G"),(1,1881,"G"),(1,1882,"G"),(0,1883,"G"),(3,1884,"G"),
(0,1885,"G"),(2,1886,"G"),...] : (int * int * string) list
fun append_if_new (lista:(int*int*string)list): int list =
let
val lista2 = []
val x = hd lista
val z = #2x
in
if (List.exists (fn y => y = z) lista2)
then lista2
else lista2@[z]
end
fun years (lista:(int*int*string)list): int list =
List.foldl append_if_new 0 lista