SML — Как написать функцию, которая преобразует тип данных в строку?

В настоящее время я работаю над домашним заданием для лекции, в которой я должен написать интерпретатор для языка, который мы определили в лекции. Часть моей домашней работы — написать функцию, которая возьмет выражение из моего типа данных и превратит его в строку.

Вот мой тип данных:

datatype basicType = voidType | intType | boolType; 
datatype etype = basicType
               | tupelType of (etype * etype)
               | functionType of etype -> basicType;

Обратите внимание, что я даже не уверен, что этот тип данных правильный. Мне разрешено использовать функции SML String.concatWith и Int.toString.

Так как это домашнее задание, которое я должен сделать, я хотел бы только начать и дать советы и рекомендации. Никаких полномасштабных решений, пожалуйста.

Я благодарен за любой вклад от вас, девочки/парни, так как я вот-вот сойду с ума от этой лекции.


person c-pid    schedule 13.05.2014    source источник


Ответы (1)


Вам нужно реализовать функцию, которая может печатать все варианты etype, рекурсивно возвращаясь к каждому значению. Вам также нужна вспомогательная функция для печати значений basicType, она не обязательно должна быть рекурсивной, а вместо этого действует как базовый случай в вашей рекурсии.

Им обоим требуется одно тело функции для каждого варианта соответствующего типа данных. Тело, обрабатывающее functionType, также должно применить эту функцию.

Вы также должны подумать о том, чтобы добавить дополнительный строковый вывод в тело каждой функции, чтобы читатель мог различать разные типы.

Например, tupelType может быть напечатано примерно так: (a, b) где a и b — рекурсивные вызовы каждого из элементов кортежа.

person Emil Vikström    schedule 13.05.2014