SML - списки и рекурсия - PullRequest
       1

SML - списки и рекурсия

1 голос
/ 05 ноября 2011

У меня есть список в SML, который содержит членов из типа данных "expr" (список "b").У меня также есть функция "What", аргументы которой приведены только от типа даты "expr".Теперь у меня проблема в следующем коде:

datatype expr = K of string| Number2 of expr * (expr list);
datatype number = Number1 of string | Number3 of int;
What....
| What (Number2 (t,[]))= Number3(0)::What(t)
| What (Number2 (y,(a::b)) = append (What(a), What(b));

Ошибка произошла, потому что b является списком expr, а функция What получила только "expr", а не "expr list",Все, что я хочу сделать, это проверить, что все члены "b", и создать новый список - какой член имеет тип данных "number".Я пытался использовать map function, но это не помогло (см. Отметки здесь: SML - несвязанная переменная или конструктор ).

Есть идеи?Есть еще один способ сделать это, не используя карту?Я укладываю его на день ..

1 Ответ

9 голосов
/ 05 ноября 2011

Ради закрытия вопроса.

Функция append, которую вы сделали в предыдущем вопросе:

fun append (nil, l2) = l2 
  | append (x::xs, l2) = x::append(xs, l2);

можно заменить на встроенный оператор добавления @. Как описывает документация :

l1 @ l2
    returns the list that is the concatenation of l1 and l2. 
...