问题标签 [mercury]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
465 浏览

mercury - 什么是表示任意二进制数据的好数据类型?

我想从磁盘读取二进制数据并将其存储在 Mercury 变量中。根据字符串库,字符串不允许嵌入空字节并使用 UTF-8 编码存储内容,所以我认为这不会起作用。到目前为止,我发现的最好的是位图库中的一行,上面写着“访问位图,就好像它们是一个八位字节的数组一样特别有效”

位图是存储任意二进制数据的好方法吗?有更好的吗?

0 投票
6 回答
3508 浏览

haskell - 除了 Monads 之外,还有什么其他方法可以用纯函数式语言处理状态?

所以我开始围绕 Monads(在 Haskell 中使用)。我很好奇 IO 或状态还有哪些其他方式可以用纯函数式语言处理(无论是在理论上还是在现实中)。例如,有一种名为“mercury”的逻辑语言使用“效果类型”。在像 haskell 这样的程序中,效果类型是如何工作的?其他系统如何工作?

0 投票
2 回答
379 浏览

gcc - Mac OS X 10.8 的 Mercury 编译错误

我在 Mac 上编译 Mercury 时遇到问题。我正在运行 Mac OS X 10.8,安装了 Xcode 4.5 以及命令行工具。

到目前为止我做了什么:

我下载了 tar.gz 文件,将其解压缩,./configure在该文件夹中运行,然后使用make PARALLEL=-j2 install命令(如其后所述./configure)。

在该步骤中,我在命令行中得到以下信息:

然后我通读了自述文件,它说我应该使用其他版本的GCC. 所以我安装了这些Command Line Tools(因为我发现它们确实包含 GCC)并再次尝试。没有运气,仍然是同样的问题。

任何帮助,将不胜感激。

0 投票
1 回答
623 浏览

mercury - 创建确定性有限自动机 (DFA) - Mercury

我想在 Mercury 中模拟一个确定性有限自动机 (DFA)。但我在几个地方都很讨厌。

形式上,DFA 具有以下特征:

  • 一组状态 S,
  • 输入字母 E <-- 求和符号,
  • 一个转换函数:S × E --> S,
  • 一个 startState s € S,
  • 一个 setOfAcceptableFinalStates F =C S。

    DFA 将始终以启动状态启动。然后 DFA 会一一读取输入中的所有字符。根据当前输入的字符和当前状态,将有一个新的状态。这些转换在转换函数中定义。当 DFA 处于其可接受的最终状态之一时,在读取最后一个字符后,DFA 将接受输入,如果不接受,则输入将被拒绝。

    图中显示了一个 DFA 接受的字符串,其中零的数量是三个的复数。条件1是初始状态,也是唯一可接受的状态。对于每个输入字符,对应的弧是跟随到下一个状态。

链接到图

必须做什么

  1. 代表状态的类型“mystate”。每个州都有一个用于识别的编号。

  2. 表示状态之间可能的转换的类型“转换”。每个转换都有一个 source_state、一个 input_character 和一个 final_state。

  3. 一种表示整个 DFA 的“状态机”类型。在解决方案中,DFA 必须具有以下属性:

    • 所有状态的集合,
    • 输入字母,
    • 一个转换函数,表示为一组可能的转换,
    • 一组接受的最终状态,
    • DFA 的当前状态
  4. 一个谓词“init_machine(状态机::out)”将他的参数与DFA统一起来,如图所示。DFA的当前状态设置为其初始状态,即1。DFA的输入字母由字符'0'和'1'组成。

  5. 用户可以输入由 DFA 控制的文本。程序将继续运行,直到用户键入 Ctrl-D 并模拟 EOF。如果用户使用了不允许进入 DFA 的输入字母表的字符,则会出现错误消息结束程序将关闭。(预先要求)

例子


我有的东西。

1

2

3(错误、finale_state 和 current_state 和 input_character)

4错过很多

5不完美

希望你能帮我

亲切的问候

0 投票
3 回答
388 浏览

prolog - 是否有任何版本的 Prolog 支持累加器的高阶抽象?

我想知道一个 Prolog 可能包含这样的内置调用:

因此,例如,要在不使用递归的情况下对列表求和,您可以编写:

是否有任何带有此构造的 Prolog 或等价物?请记住,我是 Prolog 的新手,可能会遗漏一些明显的东西。

0 投票
1 回答
1182 浏览

types - 类型为 Mercury 等逻辑编程语言带来什么好处?

我开始研究 Mercury 语言,这似乎很有趣。我是逻辑编程的新手,但对 Scala 和 Haskell 的函数式编程非常有经验。我一直在思考的一件事是,当您已经拥有至少应该与类型一样具有表达力的谓词时,为什么在逻辑编程中还需要类型。

例如,在以下代码片段中使用类型有什么好处(取自 Mercury 教程):

与仅使用谓词编写它相比:

请随意指出涵盖该主题的介绍性材料。

编辑:我可能对问题的表述有点不清楚。实际上,我是在研究了 Idris 等依赖类型语言之后才开始研究 Mercury 的,就像在依赖类型中可以在类型中使用值一样,也可以在编译时使用谓词来验证逻辑程序的正确性。如果程序需要很长时间来评估,我可以看到出于编译时性能原因使用类型的好处(但前提是类型不如“实现”复杂,在谈论依赖类型时不一定是这种情况)。我的问题是除了编译时性能之外,使用类型是否还有其他好处。

0 投票
2 回答
158 浏览

mercury - 在 Mercury 中,为什么我不能在函数应用程序中使用状态变量?

在描述状态变量时,Mercury参考手册说:“!X可能不会作为参数出现在函数应用程序中,因为考虑到状态变量和函数的通常解释,这没有意义”(第 14 页)。我想更好地理解这种推理:状态变量和函数是什么使组合变得荒谬?

我的部分困惑来自下面的代码,我可以使用!.X, !:X状态变量的形式,但不能使用!X形式。如果我可以使用前者,为什么不能使用后者?

此代码编译并按预期运行:

但是更改前两行会pick_a_b导致编译错误。

0 投票
1 回答
1004 浏览

rust - Rust 的所有权语义与 Clean 和 Mercury 中的唯一性类型有什么关系?

我注意到在 Rust 中,移动应用于左值,并且静态强制不使用移动的对象。

这些语义与 Clean and Mercury 中的唯一性类型有什么关系?它们是同一个概念吗?如果不是,它们有何不同?

0 投票
1 回答
94 浏览

lambda - Mercury 中 lambda 和谓词的匹配确定性

在 Mercury 中,我可以将 lambda 声明为与包含 lambda 的谓词的模式具有相同的确定性吗?

这就是我想要做的。我编写了一个适用于 array2d 类型的折叠函数(如下)。fold为数组中的每个元素调用调用者提供的谓词。只要它只接受一个 det 谓词作为参数,它就可以正常工作。

但我想fold接受 det 或 semidet 谓词(如果对谓词的任何调用失败,则失败)。取消注释该mode ... is semidet行会给我带来我不知道如何解决的编译器错误。问题是 lambdafold被声明为 det,所以它们不能调用 semidet Pred。如果我将 lambdas 更改为 semidet,那么fold作为一个整体就无法确定。

我该如何解决这个问题?似乎最直接的方法是声明 lambdas 从fold谓词继承它们的确定性——所以当它们fold被用作 det 时,它们是 det,对于 semidet 也是如此——但我不知道这是否可能。

当然,另一种方法是转换为具有多种模式FoldRowsFoldCols命名谓词(不是 lambda)。但这很快就变得不优雅,我想知道是否有更直接的解决方案。

0 投票
0 回答
77 浏览

types - 为什么这个变量具有自由的实例化性?

我编写了一个 Mercury 函数来计算列表骨架的长度,但它没有编译,我不明白为什么。我想知道这里发生了什么。(在下面的代码中,instfuncmode语句来自 Mercury 参考手册的第4.14.2节。我正在根据手册的声明编写函数体。)

该代码给了我以下编译器错误,其中第 26 行是TailLength = my_length(Tl)

如何Tl获得免费的实例化?我的理解是,Tl它既可以是一个实例,也可以是my_listskel空列表,并且这两个都是绑定的,而不是免费的。

我的问题是我正在处理部分实例化的数据结构(尚不支持)吗?我怀疑可能是这种情况。但是示例来自参考手册,这表明应该支持这一点。