С ссылкой на your previous question вы не можете!
Как я и пытался объяснить: это невозможно в SML!
Просто попробовать его в вашем интерпретатором
- val _ = [1,2, [6,8]];
stdIn:28.9-28.21 Error: operator and operand don't agree [literal]
operator domain: int * int list
operand: int * int list list
in expression:
2 :: (6 :: 8 :: nil) :: nil
Если мы строим список с основными конструкциями вместо синтаксического сахара, то список [1,2,3]
становится 1 :: 2 :: 3 :: nil
Теперь, если мы посмотрим на типы двух «строительных блоков» минус и ноль
- op::;
val it = fn : 'a * 'a list -> 'a list
- nil;
val it = [] : 'a list
затем мы видим, что оператор infix cons принимает аргумент типа 'a
с левой стороны и список 'a
с правой стороны.
Таким образом, мы можем видеть, что если мы построим список ints, тогда мы должны дать ему int с левой стороны и список ints с правой стороны (в качестве примера выше). Должно быть ясно, что мы не можем ни к чему, как это:
[1, 2] :: 3 :: nil
, которая эквивалентна (1 :: 2 :: nil) :: 3 :: nil
Это в основном дублирует [ваш предыдущий вопрос] (http://stackoverflow.com/questions/15787639/how-can-i-define-a-heteregeneous-list-datatype), в частности то, что мы обсуждали в комментариях. –
Да, но я определяю функцию, которая преобразует это, но просто преобразует тип INT в int. Я не могу обрабатывать другой тип 'LIST'. – sarah
На самом деле я просто хочу показать в ручном режиме вывод, ничего больше. – sarah