神交在序言绿色削减我试图将它们添加到继任算术总和的标准定义(见谓词plus中什么是该查询的SLD树?).这个想法是通过消除所有无用的回溯(即,没有... ; false)尽可能"清理"输出,同时在参数实例化的所有可能组合下保持相同的行为 - 所有实例化,一个/两个/三个完全未实例化,以及所有变化包括部分实例化的args.
这是我在尝试尽可能接近这个理想时能够做到的事情(我承认错误的答案是如何插入绿色切割append/3作为来源):
natural_number(0).
natural_number(s(X)) :- natural_number(X).
plus(X, Y, X) :- (Y == 0 -> ! ; Y = 0), (X == 0 -> ! ; true), natural_number(X).
plus(X, s(Y), s(Z)) :- plus(X, Y, Z).
Run Code Online (Sandbox Code Playgroud)
在SWI下,这似乎适用于所有查询但有形状的查询?- plus(+X, -Y, +Z).,如SWI的谓词描述符号.例如,?- plus(s(s(0)), Y, s(s(s(0)))).收益率Y = s(0) ; false..我的问题是:
让我们考虑下面的Prolog程序(来自"The Prolog"):
natural_number(0).
natural_number(s(X)) :- natural_number(X).
plus(X, 0, X) :- natural_number(X).
plus(X, s(Y), s(Z)) :- plus(X, Y, Z).
Run Code Online (Sandbox Code Playgroud)
和查询:
?- plus(s(s(s(0))), s(0), Z).
Run Code Online (Sandbox Code Playgroud)
SICStus和SWI都会产生预期的Z = s(s(s(s(0))))答案,但会询问用户下一个答案(正确no/ false答案).但是,我无法理解为什么在找到唯一目标后SLD树中存在一个开放分支.我尝试在SICStus和SWI下调试,但我还不能解释结果.我只能说,据我所知,两者都是回溯plus(s(s(s(0))), 0, _Z2).有人可以帮我理解这种行为吗?
在 Z3 中,您必须 to_real 才能获得 Int 的 Real 等价物。是否有一些对逆转换的支持,即截断、舍入或类似转换?在消极的情况下,Z3 最友好的定义方式是什么(如果有的话)?非常感谢大家的解答。
在您说这个问题已经被回答了很多次之前,这是我的代码片段:
final int x;
try {
x = blah();
} catch (MyPanicException e) {
abandonEverythingAndDie();
}
System.out.println("x is " + x);
Run Code Online (Sandbox Code Playgroud)
如果调用abandonEverythingAndDie()具有结束整个程序执行的效果(比如因为它调用System.exit(int)),那么x无论何时使用它都会被初始化.
在当前的Java语言中是否有一种方法可以使编译器对变量初始化感到满意,方法是通知它abandonEverythingAndDie()是一种永远不会将控制返回给调用者的方法?
我不想要
final关键字x在声明时初始化,println的范围内try...catch.我的问题与这个问题非常相似,但有所不同.我想创建一个行为方式的宏(或其他):
julia> @my-macro x + 2
:(x + 2)
Run Code Online (Sandbox Code Playgroud)
(请注意,x + 2 未包含在引号中).朱莉娅有类似的东西吗?如果没有,我该怎么办?(请详细说明其工作原理.)
我必须在最新版本的Haskell上编译一个为以前版本的标准库编写的软件.代码假定Data.Map.lookup具有以下类型:
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
Run Code Online (Sandbox Code Playgroud)
例如GHC 6.8.1 /容器0.1.0.0的情况,但由于(至少)GHC 6.10.1 /容器0.2.0.0 Data.Map.lookup具有以下类型:
lookup :: Ord k => k -> Map k a -> Maybe a
Run Code Online (Sandbox Code Playgroud)
由于我对Haskell知之甚少,我正在寻找当前库中的变通方法或等效函数.谁能帮我?