2015-11-14 3 views
1

Я пытаюсь сделать следующее, но выходы компилятора с кодом 1.Ошибка SML/NJ. Закончено с кодом выхода 1

exception InvalidCharacter 

fun order (_, _, nil) = nil 
    | order(b:char list, l::xl::xxl, s::xs) = if s=l then length(l::xl::xxl)::(order (b, b, xs)) 
else order(b, xl::xxl, s::xs) 
    | order (_, nil, _) = raise InvalidCharacter; 

order ([#"a",#"b", #"c", #"d", #"e"],[#"a",#"b", #"c", #"d", #"e"],[#"b", #"e"]); 

И компилятор также дает неисчерпывающее соответствия для этой функции. Я не понимаю, почему.

+0

Похоже, вы не соответствовали случаю, когда средний аргумент имеет ровно один элемент. –

+0

@DavidYoung Ohh! Я вижу сейчас! большое спасибо – Tim

ответ

1

Для среднего аргумента вы только что сопоставляли случаи, когда в списке есть как минимум два аргумента, а когда он пуст. Вам также нужно совпадение, когда список имеет ровно один элемент.