Мне нужно создать функцию, которая принимает средние значения, так что [(0,0), (1,3), (4,12)]
становится [(0, 1), (3,4)]
(ответ).
Один подход: начиная с [(0,0), (1,3), (4,12)]
, вы можетеиспользуйте <a href="http://sml-family.org/Basis/list.html" rel="nofollow noreferrer">List</a>.tl
и <a href="http://sml-family.org/Basis/list-pair.html" rel="nofollow noreferrer">ListPair</a>.zip
, чтобы получить [((0,0),(1,3)), ((1,3),(4,12))]
.Тогда вам просто нужна функция, которая принимает ((0,0),(1,3))
до (0,1)
и ((1,3),(4,12))
до (3,4)
.
Другой подход: вместо вставки (0,0)
в начале списка, вы можете использовать (0, nil)
как значение <em>init</em>
при вызове <a href="http://sml-family.org/Basis/list.html" rel="nofollow noreferrer">List</a>.foldl
.<em>f</em>
будет иметь тип (int * int) * (int * int list)
и займет ((1,3),(0,nil))
до (3,[(0,1)])
и ((4,12),(3,[(0,1)]))
до (12,[(3,4),(0,1)])
.Вы получите (12,[(3,4),(0,1)])
, откуда вы можете легко получить [(0,1),(3,4)]
.