小编fal*_*lse的帖子

逻辑编程的最佳用途是什么?

逻辑编程我指的是声明性编程语言的子范例.不要混淆这个问题和"如果 - 那么其他什么问题可以解决?"

像Prolog这样的语言非常吸引人,为了学习而值得学习,但我不得不想知道哪种类型的现实问题最能用这种语言表达和解决.还有更好的语言吗?在更流行的编程语言中,逻辑编程是否存在另一个名称?这个答案的愤世嫉俗版本是Python Paradox的一个变种吗?

logic functional-programming prolog logic-programming

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

Prolog - ASSERT和RETRACT

我想知道,我知道你可以assert用来添加事实或规则,或者如果你已经声明了谓词-:dynamic,但是这只允许在那个会话中保留所做的更改,例如,如果你关闭了Prolog窗口然后数据库更改丢失.

所以我想知道,有没有办法使它assertretract谓词可以对Prolog .pl文件进行永久性更改?

谢谢

prolog prolog-assert

25
推荐指数
1
解决办法
2万
查看次数

如何在SWI-Prolog中创建事实?

我只是想创造类似的东西:like(x,y).我已经尝试了很长时间而且真的很沮丧,有人可以告诉我该怎么做??? !!!

prolog

25
推荐指数
1
解决办法
1万
查看次数

如何在Emacs中写入标准输出

我试图明智地调试Emacs程序的性能.特别是,我通过WLAN,手机等在远程连接上遇到极长的启动时间(~5'与裸Emacs相比为~1').在这种情况下,任何message书面都没有帮助,因为显示器没有刷新一点都不

我想做的是写入Linux进程的"标准输出".我知道这种--batch模式,但这对我没有帮助,因为我想以交互方式使用Emacs.

那么如何将消息写入Linux标准输出(而不是Emacs标准输出)?

emacs messages

25
推荐指数
3
解决办法
1357
查看次数

go-lang咖喱怎么样?

在像Haskell这样的函数式编程中,我可以定义函数

add a b = a+b
Run Code Online (Sandbox Code Playgroud)

然后add 3将返回一个带有一个参数的函数并返回3 + something

我怎么能在GO中这样做?

当我定义一个多于一个(比如n)参数的函数时,我可以只给它一个参数并得到另一个带n-1个参数的函数吗?

更新:

对不起我原来问题中的不精确的话.

我认为我的问题应该被问为两个问题:

  • 在GO中有部分应用吗?
  • GO咖喱怎么样?

感谢TheOnly92和Alex解决我的第二个问题.但是,我对第一个问题也很好奇.

functional-programming currying partial-application go

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

更紧凑的定义

鉴于word/1,

word(W) :-
   abs(ABs),
   ABs = W.

abs([]).
abs([AB|ABs]) :-
   abs(ABs),
   ab(AB).

ab(a).
ab(b).

?- word(W).
   W = []
;  W = [a]
;  W = [b]
;  W = [a,a]
;  W = [b,a]
;  W = [a,b]
;  W = [b,b]
;  W = [a,a,a]
;  W = [b,a,a]
;  W = [a,b,a]
;  W = [b,b,a]
;  W = [a,a,b]
;  W = [b,a,b]
;  W = [a,b,b]
;  W = [b,b,b]
;  W = …
Run Code Online (Sandbox Code Playgroud)

prolog

24
推荐指数
4
解决办法
1065
查看次数

自反传递闭包的定义

许多谓词基本上使用某种形式的传递闭包,只是发现终止也必须得到解决.为什么不一次解决这个问题closure0/3:

:- meta_predicate closure0(2,?,?).
:- meta_predicate closure(2,?,?).

:- meta_predicate closure0(2,?,?,+). % internal

closure0(R_2, X0,X) :-
   closure0(R_2, X0,X, [X0]).

closure(R_2, X0,X) :-
   call(R_2, X0,X1),
   closure0(R_2, X1,X, [X1,X0]).

closure0(_R_2, X,X, _).
closure0(R_2, X0,X, Xs) :-
   call(R_2, X0,X1),
   non_member(X1, Xs),
   closure0(R_2, X1,X, [X1|Xs]).

non_member(_E, []).
non_member(E, [X|Xs]) :-
   dif(E,X),
   non_member(E, Xs).
Run Code Online (Sandbox Code Playgroud)

是否存在此定义不能用于实现传递闭包的情况?


为什么dif/2?

详细回答@ WouterBeek的评论:dif/2或者iso_dif/2是理想的,因为它们能够显示或发出潜在问题的信号.但是,在当前的实现中,顶级循环通常会隐藏实际问题.考虑一下closure0(\_^_^true,a,b)本身肯定存在问题的目标.使用以下系统时,实际问题直接不可见.

| ?- closure0(\_^_^true,a,b). % SICStus
yes

?- closure0(\_^_^true,a,b).   % SWI
true ;
true ;
true ...
Run Code Online (Sandbox Code Playgroud)

两个顶级循环都没有显示我们真正想要看到的内容:悬空约束.在SICStus中,我们需要一个伪变量来产生一些替换,在SWI中,查询必须被包装call_residue_vars/2.以这种方式,现在显示所有附加约束的变量.

| …
Run Code Online (Sandbox Code Playgroud)

prolog transitive-closure prolog-toplevel meta-predicate

22
推荐指数
1
解决办法
2976
查看次数

希尔伯特系统 - 自动化证明

我试图在Hilbert风格的系统中证明语句〜(a-> ~b)=> a .不幸的是,似乎不可能想出一个通用算法来找到证据,但我正在寻找一种强力型策略.关于如何攻击这个的任何想法都是受欢迎的.

math verification logic computer-science theorem-proving

21
推荐指数
4
解决办法
4222
查看次数

Prolog:子句不在源文件中

我有这段代码:

% Family tree
female(pen).
male(tom).
male(bob).
female(liz).
female(pat).
female(ann).
male(jim).

parent(pam, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat, jim).
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Warning: Clauses of female/1 are not together in source-file
Warning: Clauses of male/1 are not together in source-file
Run Code Online (Sandbox Code Playgroud)

这个错误的目的是什么?
我的意思是,文件编译并运行得很好,我知道错误的含义.但为什么?
这只是强制执行最佳做法的通知吗?

我对逻辑编程很新.
谢谢!

prolog iso-prolog

21
推荐指数
2
解决办法
2万
查看次数

来自GNU Prolog的不连续的谓词警告

对于云雀,我已经开始通过http://www.learnprolognow.org/学习Prolog .我的理由是我开始.

我不确定应该如何编写以下(简单?)练习按预期工作. http://cs.union.edu/~striegnk/learn-prolog-now/html/node13.html#sec.l1.exercises

我可以看到,牛羚的Prolog 1.4(http://www.gprolog.org/)不开心,对于向导\ 1第2谓词不是旁边的第一个.我可以重新排序程序,使其工作,但后来我结束了代码到我的新手Prolog的眼睛比下面介绍的少了一个可以理解的.

我错过了一些明显的东西吗

wiz.pl

wizard(ron).
hasWand(harry).
quidditchPlayer(harry).

wizard(X) :- hasBroom(X),hasWand(X).
hasBroom(X) :- quidditchPlayer(X).
Run Code Online (Sandbox Code Playgroud)

咨询wiz.pl

| ?- [wiz].
compiling D:/wiz.pl for byte code...
D:/wiz.pl:5: warning: discontiguous predicate wizard/1 - clause ignored
D:/wiz.pl compiled, 5 lines read - 632 bytes written, 24 ms
Run Code Online (Sandbox Code Playgroud)

prolog

20
推荐指数
2
解决办法
9731
查看次数