我想知道是否有任何方法可以创建一个函数,给定一个名称
/标识符
列表,例如[Monday, Tuesday, ...]
,自动创建一个数据类型 day = Monday |星期二 | ...
和 next 函数,下周一 = 星期二
,下星期二 = 星期三
,...保留(并反射(reflect))标识符的顺序在列表中。我知道我可以手动完成此操作,但我想知道数据类型声明是否可以在函数内实现。如果这在 SML 中不可能,那么哪些语言(最好是函数式语言)允许这样做?
最佳答案
这在标准机器学习中是不可能的。 (在某些实现中,您实际上可以使用 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
class ,它提供了 succ
函数。 (Show
类只是为了让我们可以打印结果。)deriving
是 Haskell 编译器中内置的一种临时机制,但 GHC 提供了许多元编程工具。
关于metaprogramming - 如何在SML中自动构造有序数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671996/