小编Pie*_*one的帖子

继承算术总和的最佳绿色削减是什么?

神交在序言绿色削减我试图将它们添加到继任算术总和的标准定义(见谓词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 swi-prolog successor-arithmetics prolog-cut

6
推荐指数
1
解决办法
370
查看次数

这个查询的SLD树是什么?

让我们考虑下面的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).有人可以帮我理解这种行为吗?

prolog successor-arithmetics prolog-cut

5
推荐指数
0
解决办法
2389
查看次数

Z3 支持实数到整数的转换吗?

在 Z3 中,您必须 to_real 才能获得 Int 的 Real 等价物。是否有一些对逆转换的支持,即截断、舍入或类似转换?在消极的情况下,Z3 最友好的定义方式是什么(如果有的话)?非常感谢大家的解答。

z3

4
推荐指数
1
解决办法
969
查看次数

如何避免"本地变量可能未初始化"Java编译错误?(是的,认真!)

在您说这个问题已经被回答了很多次之前,这是我的代码片段:

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.

java

4
推荐指数
1
解决办法
1198
查看次数

Julia:我如何创建一个返回其参数的宏?

我的问题与这个问题非常相似,但有所不同.我想创建一个行为方式的宏(或其他):

julia> @my-macro x + 2
:(x + 2)
Run Code Online (Sandbox Code Playgroud)

(请注意,x + 2 包含在引号中).朱莉娅有类似的东西吗?如果没有,我该怎么办?(请详细说明其工作原理.)

macros julia

4
推荐指数
1
解决办法
151
查看次数

将Haskell代码移植到新版本的Data.Map.lookup

我必须在最新版本的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知之甚少,我正在寻找当前库中的变通方法或等效函数.谁能帮我?

haskell

3
推荐指数
1
解决办法
270
查看次数