Вот как можно начать писать рекурсивное определение, на которое намекает Андреас Россберг.
fun f [] = ...
| f ((x,y)::pairs) = ...
Это одна из основ функции f
, которая принимает список пар. Он использует сопоставление с образцом для исчерпания всех возможных входных значений, сначала разбивая списки на пустые и непустые списки, а затем разбивая непустые списки на «голову, представляющую собой пару x
и y
, и хвост оставшихся пар за пределами первой пары, являющейся pairs
.
Есть много способов, которыми вы можете написать это. Другой использует case-of :
fun f pairs =
case pairs of
[] => ...
| (x,y) :: rest => ...
Здесь, потому что pairs
- это все пары, и сопоставление с образцом в case-of все еще разделяет непустой список на голову и хвост, я хочу избежать наложения полного списка ввода , pairs
, с оставшимися парами за первой парой, rest
. Поэтому я дал им отдельные имена.
Похоже, что на данный момент вам больше всего пригодится чтение вашего учебника. о сопоставлении с образцом и спросите репетитора какого-то рода.