SML - последний в списке - PullRequest
0 голосов
/ 29 мая 2011

Я хочу последнее значение в списке SML.

например, 1::2::3 => 3

Я пытался использовать «последний», но это не сработало.

Я пытался реализовать это, как это:

val rec last =
    fn (h::list) => last (list)
       | (h::nil) => h
       | (nil) => nil;

Но это доставляет мне проблемы: совпадение с избыточностью.

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Я сомневаюсь, что регистр (h::nil) является избыточным, потому что это особый случай (h::list). Я думаю, что вы должны изменить порядок своих матчей:

    exception Empty
    val rec last =
        fn (h::nil) => h
           |(h::list) => last (list)
           | (nil) => raise Empty;

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

2 голосов
/ 16 июля 2011

Можно также сделать так просто:

exception Empty
fun lastinList [] = raise Empty
| lastinList l = hd(rev(l));
...