Как автоматически создавать упорядоченные типы данных в SML - PullRequest
0 голосов
/ 05 октября 2018

Я хотел бы знать, есть ли способ создать функцию, которая, учитывая список names / identifiers, например, [Monday, Tuesday, ...], автоматически создает datatype day = Monday | Tuesday | ... и следующую функцию, такую, что next Monday = Tuesday, next Tuesday = Wednesday, ... сохраняя (и отражая) порядок идентификаторов в списке.Я знаю, что могу сделать это вручную, но мне было интересно, возможны ли объявления типов данных внутри функций.Если это невозможно в SML, какие языки (желательно функциональные) позволяют это сделать?

1 Ответ

0 голосов
/ 05 октября 2018

Это невозможно в стандартном ML.(В некоторых реализациях вы можете написать файл и прочитать его во время выполнения, используя use, но это, как правило, вызывает недовольство.)

Haskell может сделать это:

$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Prelude> data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Enum, Show)
Prelude> succ Mon
Tue
Prelude> succ Sun
*** Exception: succ{Day}: tried to take `succ' of last tag in enumeration
CallStack (from HasCallStack):
  error, called at <interactive>:5:62 in interactive:Ghci2

Предложение deriving указывает компилятору автоматически реализовать класс Enum , который обеспечивает функцию succ.(Класс Show существует только для того, чтобы мы могли печатать результаты.) deriving - это специальный механизм, встроенный в компилятор Haskell, но GHC предоставляет множество средств метапрограммирования.

...