ML: сопоставление неистощительной ошибки

#sml

#sml

Вопрос:

Привет, я новичок в ML, и я не понимаю, как решить эту проблему.

Это код

 datatype ttree = Empty | Node of int * ttree * ttree * ttree;

(* initialize the fist node *)

fun Addthird(K:int, Empty) = Node(K, Empty, Empty, Empty);

fun Addsecond(Y:int, K:int, Empty) = Node(Y, Empty, Addthird(K, Empty), Empty);

fun AddNode(T:int, Y:int, K:int, Empty) = Node(T, Empty, Addsecond(Y, K, Empty), Empty);
  

и это ошибка

ОШИБКА — ОШИБКА

Спасибо, Рико

Ответ №1:

Просто спросите себя, что произойдет, если вы позвоните, скажем,

 Addthird(0, Node(1, Empty, Empty, Empty))
  

Аналогично для других функций. Сопоставление с шаблоном должно охватывать все случаи, ваши определения используются только Empty в качестве последнего аргумента.