问题标签 [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.
mercury - 什么是表示任意二进制数据的好数据类型?
我想从磁盘读取二进制数据并将其存储在 Mercury 变量中。根据字符串库,字符串不允许嵌入空字节并使用 UTF-8 编码存储内容,所以我认为这不会起作用。到目前为止,我发现的最好的是位图库中的一行,上面写着“访问位图,就好像它们是一个八位字节的数组一样特别有效”
位图是存储任意二进制数据的好方法吗?有更好的吗?
haskell - 除了 Monads 之外,还有什么其他方法可以用纯函数式语言处理状态?
所以我开始围绕 Monads(在 Haskell 中使用)。我很好奇 IO 或状态还有哪些其他方式可以用纯函数式语言处理(无论是在理论上还是在现实中)。例如,有一种名为“mercury”的逻辑语言使用“效果类型”。在像 haskell 这样的程序中,效果类型是如何工作的?其他系统如何工作?
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)并再次尝试。没有运气,仍然是同样的问题。
任何帮助,将不胜感激。
mercury - 创建确定性有限自动机 (DFA) - Mercury
我想在 Mercury 中模拟一个确定性有限自动机 (DFA)。但我在几个地方都很讨厌。
形式上,DFA 具有以下特征:
- 一组状态 S,
- 输入字母 E <-- 求和符号,
- 一个转换函数:S × E --> S,
- 一个 startState s € S,
一个 setOfAcceptableFinalStates F =C S。
DFA 将始终以启动状态启动。然后 DFA 会一一读取输入中的所有字符。根据当前输入的字符和当前状态,将有一个新的状态。这些转换在转换函数中定义。当 DFA 处于其可接受的最终状态之一时,在读取最后一个字符后,DFA 将接受输入,如果不接受,则输入将被拒绝。
图中显示了一个 DFA 接受的字符串,其中零的数量是三个的复数。条件1是初始状态,也是唯一可接受的状态。对于每个输入字符,对应的弧是跟随到下一个状态。
必须做什么
代表状态的类型“mystate”。每个州都有一个用于识别的编号。
表示状态之间可能的转换的类型“转换”。每个转换都有一个 source_state、一个 input_character 和一个 final_state。
一种表示整个 DFA 的“状态机”类型。在解决方案中,DFA 必须具有以下属性:
- 所有状态的集合,
- 输入字母,
- 一个转换函数,表示为一组可能的转换,
- 一组接受的最终状态,
- DFA 的当前状态
一个谓词“init_machine(状态机::out)”将他的参数与DFA统一起来,如图所示。DFA的当前状态设置为其初始状态,即1。DFA的输入字母由字符'0'和'1'组成。
用户可以输入由 DFA 控制的文本。程序将继续运行,直到用户键入 Ctrl-D 并模拟 EOF。如果用户使用了不允许进入 DFA 的输入字母表的字符,则会出现错误消息结束程序将关闭。(预先要求)
例子
我有的东西。
1
2
3(错误、finale_state 和 current_state 和 input_character)
4错过很多
5不完美
希望你能帮我
亲切的问候
prolog - 是否有任何版本的 Prolog 支持累加器的高阶抽象?
我想知道一个 Prolog 可能包含这样的内置调用:
因此,例如,要在不使用递归的情况下对列表求和,您可以编写:
是否有任何带有此构造的 Prolog 或等价物?请记住,我是 Prolog 的新手,可能会遗漏一些明显的东西。
types - 类型为 Mercury 等逻辑编程语言带来什么好处?
我开始研究 Mercury 语言,这似乎很有趣。我是逻辑编程的新手,但对 Scala 和 Haskell 的函数式编程非常有经验。我一直在思考的一件事是,当您已经拥有至少应该与类型一样具有表达力的谓词时,为什么在逻辑编程中还需要类型。
例如,在以下代码片段中使用类型有什么好处(取自 Mercury 教程):
与仅使用谓词编写它相比:
请随意指出涵盖该主题的介绍性材料。
编辑:我可能对问题的表述有点不清楚。实际上,我是在研究了 Idris 等依赖类型语言之后才开始研究 Mercury 的,就像在依赖类型中可以在类型中使用值一样,也可以在编译时使用谓词来验证逻辑程序的正确性。如果程序需要很长时间来评估,我可以看到出于编译时性能原因使用类型的好处(但前提是类型不如“实现”复杂,在谈论依赖类型时不一定是这种情况)。我的问题是除了编译时性能之外,使用类型是否还有其他好处。
mercury - 在 Mercury 中,为什么我不能在函数应用程序中使用状态变量?
在描述状态变量时,Mercury参考手册说:“!X
可能不会作为参数出现在函数应用程序中,因为考虑到状态变量和函数的通常解释,这没有意义”(第 14 页)。我想更好地理解这种推理:状态变量和函数是什么使组合变得荒谬?
我的部分困惑来自下面的代码,我可以使用!.X, !:X
状态变量的形式,但不能使用!X
形式。如果我可以使用前者,为什么不能使用后者?
此代码编译并按预期运行:
但是更改前两行会pick_a_b
导致编译错误。
rust - Rust 的所有权语义与 Clean 和 Mercury 中的唯一性类型有什么关系?
我注意到在 Rust 中,移动应用于左值,并且静态强制不使用移动的对象。
这些语义与 Clean and Mercury 中的唯一性类型有什么关系?它们是同一个概念吗?如果不是,它们有何不同?
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 也是如此——但我不知道这是否可能。
当然,另一种方法是转换为具有多种模式FoldRows
的FoldCols
命名谓词(不是 lambda)。但这很快就变得不优雅,我想知道是否有更直接的解决方案。
types - 为什么这个变量具有自由的实例化性?
我编写了一个 Mercury 函数来计算列表骨架的长度,但它没有编译,我不明白为什么。我想知道这里发生了什么。(在下面的代码中,inst
、func
和mode
语句来自 Mercury 参考手册的第4.1和4.2节。我正在根据手册的声明编写函数体。)
该代码给了我以下编译器错误,其中第 26 行是TailLength = my_length(Tl)
:
如何Tl
获得免费的实例化?我的理解是,Tl
它既可以是一个实例,也可以是my_listskel
空列表,并且这两个都是绑定的,而不是免费的。
我的问题是我正在处理部分实例化的数据结构(尚不支持)吗?我怀疑可能是这种情况。但是示例来自参考手册,这表明应该支持这一点。