首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mercury中的无限制变量名声明

Mercury中的无限制变量名声明
EN

Stack Overflow用户
提问于 2011-12-16 13:29:51
回答 3查看 233关注 0票数 2

我想在Mercury中声明一个数据类型,它可以具有可变数量的值和名称。例如:

代码语言:javascript
复制
type goal ---> pick; give; come.

有三个变量/值。

我想要这样的东西:

代码语言:javascript
复制
type myplayer ---> de value declaration here.

这就是不受限制或不固定的变量数量。

所以我可以使用myplayer来声明像v1, v2, v3 and v4.这样的值/变量,第二次我可以用它来声明像:a, b, c, d, e, z, aa, ab and az这样的东西。

值的数量不受限制,名称也不固定。

我是水星新来的。

EN

回答 3

Stack Overflow用户

发布于 2011-12-17 08:39:52

正如其他人所说,这在水星是不可能的--这是故意的。

你可能想要的是,如果你想要一个表达的类型: v1 v2 v3...等为:

代码语言:javascript
复制
:- type my_type
    ----> v(int).

:- func name(my_type) = string.

name(v(Num)) = formst("v%d", [i(Num)]).

该类型表示所有整数中的v,函数名可用于“美化”该类型的值。

票数 2
EN

Stack Overflow用户

发布于 2011-12-17 05:51:13

你直接要求的,根本做不到。给定的

代码语言:javascript
复制
:- type question
        --->    truth(string, bool)
        ;       blank(string, string)
        ;       multiple(string, string, list(string)).

要添加其他类型的问题,只能通过在定义此类型的地方扩展它,并重新编译模块-并进行许多其他更改,就像以前的确定性代码,如

代码语言:javascript
复制
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 unionstypeclasses阅读中受益。

票数 1
EN

Stack Overflow用户

发布于 2013-01-02 15:41:01

据我所知,这个问题。你想要一些类似Prolog的行为。即没有类型化的谓词。在静态类型的系统中,您总是可以通过自己处理来实现这种行为。很久以前,我在Turbo Prolog中看到过这样的例子(他们用Turbo/Visual prolog实现了ISO Prolog)。

考虑如下内容(我不确定它是否正确):

代码语言:javascript
复制
:- 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)])).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8530179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档