2014-09-24 3 views

ответ

1

Вы можете использовать List.last, даже если вы должны быть осторожны, так как это вызовет исключение, если вы используете его на пустой список.

Для реализации мОсмл, вы можете найти в документации на http://mosml.org/mosmllib/List.html#last-val

+0

Я знаю, что он существует в стандартных библиотеках, но я хочу реализовать эту функцию, используя либо foldl, либо foldr – user3038489

1

Как уже упоминалось RasmusWL, List.last является подходящим инструментом для общего пользования.

Это может быть воссоздано foldl:

fun last(alist, init) = List.foldl (fn(x,y) => x) init alist

Это производит подпись: fn : 'a list * 'a -> 'a

Чтобы написать его с foldr использования:

fun last(alist, init) = List.foldr (fn(x,y) => x) init (List.rev alist)

Преимущество использования foldl что он не требует проверки на пустой список:

List.foldl (fn(x,y) => x) 0 []; 
(* val it = 0 : int *) 
Смежные вопросы