我想在Mercury中声明一个数据类型,它可以具有可变数量的值和名称。例如:
type goal ---> pick; give; come.有三个变量/值。
我想要这样的东西:
type myplayer ---> de value declaration here.这就是不受限制或不固定的变量数量。
所以我可以使用myplayer来声明像v1, v2, v3 and v4.这样的值/变量,第二次我可以用它来声明像:a, b, c, d, e, z, aa, ab and az这样的东西。
值的数量不受限制,名称也不固定。
我是水星新来的。
发布于 2011-12-17 08:39:52
正如其他人所说,这在水星是不可能的--这是故意的。
你可能想要的是,如果你想要一个表达的类型: v1 v2 v3...等为:
:- type my_type
----> v(int).
:- func name(my_type) = string.
name(v(Num)) = formst("v%d", [i(Num)]).该类型表示所有整数中的v,函数名可用于“美化”该类型的值。
发布于 2011-12-17 05:51:13
你直接要求的,根本做不到。给定的
:- type question
---> truth(string, bool)
; blank(string, string)
; multiple(string, string, list(string)).要添加其他类型的问题,只能通过在定义此类型的地方扩展它,并重新编译模块-并进行许多其他更改,就像以前的确定性代码,如
answer(truth(_, yes)) = "true".
answer(truth(_, no)) = "false".
answer(blank(_, A)) = A.
answer(multiple(_, A, _)) = A.在给定您的新问题类型时将失败。在编译时被告知你没有更新你的程序以反映添加了“选择所有正确答案”类型的问题,这是你有一个问题类型的一个很好的原因,而不是你的题库的字符串列表[["Are foxes pretty?", "true"], ["Green foxes are ____", "adorable!", "fake", "evidence of animal cruelty"]]。
你所要求的是做不到的。然而,您实际想要做的事情--您认为“类型的可变数量”将是一种有用的手段--肯定可以通过其他方式来实现。我不知道这是什么方式,因为我不能从你的问题中看出你为什么要这样做。也许您可以从语言参考中的discriminated unions或typeclasses阅读中受益。
发布于 2013-01-02 15:41:01
据我所知,这个问题。你想要一些类似Prolog的行为。即没有类型化的谓词。在静态类型的系统中,您总是可以通过自己处理来实现这种行为。很久以前,我在Turbo Prolog中看到过这样的例子(他们用Turbo/Visual prolog实现了ISO Prolog)。
考虑如下内容(我不确定它是否正确):
:- type any_type ---> atom_value(string)
; number_value(int)
; struct_value(any_type, list(any_type)).
guess(atom_value("v1")).
guess(atom_value("a")).
guess(atom_value("aa")).
guess(number_value(42)).
guess(struct_value(atom_value("pair"), [number_value(3), number_value(4)])).https://stackoverflow.com/questions/8530179
复制相似问题