2013-04-05 5 views
0

Я определяю тип данных для нескольких списков: datatype intnest= INT of int | LIST of intnest list; Теперь я пытаюсь написать функцию, которая может преобразовать этот тип в основной тип.Как я могу преобразовать свой тип данных?

например: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]] как я могу это сделать? Заранее благодарю за помощь

+0

Это в основном дублирует [ваш предыдущий вопрос] (http://stackoverflow.com/questions/15787639/how-can-i-define-a-heteregeneous-list-datatype), в частности то, что мы обсуждали в комментариях. –

+0

Да, но я определяю функцию, которая преобразует это, но просто преобразует тип INT в int. Я не могу обрабатывать другой тип 'LIST'. – sarah

+0

На самом деле я просто хочу показать в ручном режиме вывод, ничего больше. – sarah

ответ

1

С ссылкой на 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

+0

'datatype intnest = INT of int | СПИСОК ИНТЕРНЕТ-списка; fun tagged2s (INT i) = valOf (Int.fromString (Int.toString i)) map tagged2s [INT 1, INT 4]; ' – sarah

+0

его результаты:' val it = [1,4]: int list', но я не знаю, как это сделать для списка типов. Я надеюсь понять свой смысл. – sarah