我开始使用XSB进行Prolog编程.
对于(XSB)Prolog,您会为vim编辑器使用什么语法突出显示脚本或插件?
如何使用XSB Prolog进行单元测试?有图书馆吗?或者是否有可能以某种方式plunit
在XSB中使用SWI-Prolog的库?
如果没有可用的XSB测试库(或其他Prologs没有与之兼容plunit
),这个问题的变体可能是:你如何测试你的Prolog代码?您是否使用喜欢的模式进行测试?
Hilog术语(即具有作为算子任意术语的化合物)是否仍被视为XSB Prolog(或任何其他Prolog)中的强大功能?目前有许多XSB项目正在使用此功能吗?例如他们中的哪一个?
我问,因为据我所知,高阶编程同样可以使用ISO内置调用/ N.
具体来说,我想了解XSB是否仅仅出于历史原因使用Hilog术语,或者如果Hilog术语与当前的ISO标准相比具有相当大的优势.
所以我试图解决这里给出的布斯安排问题.它基本上是一个滑动瓷砖拼图,其中一个(展位)瓷砖必须到达目标点,最后所有其他(展位)瓷砖应该在其原始位置.每个图块/展位都有一个尺寸,以下是输入事实和关系描述:
由表格
位置(B,W,H)的事实组成的关系,指定展位B的初始位置(W,H).
一个事实目标(B,W,H),指定
目标摊位B 的目的地(W,H).
该程序应该从文件中读取输入事实,但我只是想尝试解决,所以我现在只复制粘贴一个可能的输入,我写了一些基本的子句:
room(3, 3).
booths(3).
dimension(1, 2, 1).
dimension(2, 2, 1).
dimension(3, 1, 1).
position(1, 0, 1).
position(2, 1, 2).
position(3, 0, 0).
target(3, 0, 2).
horizon(10).
xlim(X) :- room(X,_).
ylim(X) :- room(_,X).
sum(X,Y,Z) :- Z is X+Y .
do(position(B,X,Y),movedown,position(B,X,Z)) :- Y > 0 , sum(Y,-1,Z) .
do(position(B,X,Y),moveup,position(B,X,Z)) :- ylim(L), Y < L , sum(Y,1,Z) .
do(position(B,X,Y),moveleft,position(B,Z,Y)) :- X > 0 , sum(X,-1,Z) .
do(position(B,X,Y),moveright,position(B,Z,Y)) :- xlim(L), …
Run Code Online (Sandbox Code Playgroud) 如何模拟软切割 I* - > T; E在ISO Prolog中?我有副作用,所以我不能多次调用它.
除了最后一个要求,我认为以下定义有效:
if_(I, T, E) :-
not(not(I)) ->
call((I, T));
call((not(I), E)).
Run Code Online (Sandbox Code Playgroud)
(我实际上正在使用XSB prolog; XSB的解决方案对我也很有用.)
我有一个 owl 本体,我会使用 prolog 规则和 XSB 来进行推理。我知道 THEA 库有助于将 owl 代码转换为 prolog,但没有可用的示例。那么有人可以帮助我吗?提前致谢。
我想在服务器中托管 XSB Prolog。有人可以告诉我程序是什么吗?以下 git 链接解释了如何在服务器上托管 SWIPL,但同样不适用于 XSB https://github.com/SWI-Prolog/swish
非常感谢您的帮助。
Prolog 中的高阶编程风格在 HiLog 和 ?Prolog 中首创。
HiLog的动机包括其实现高阶谓词的能力,例如maplist
:
maplist(F)([],[]).
maplist(F)([X|Xs],[Y|Ys]) <- F(X,Y), maplist(F)(Xs,Ys).
Run Code Online (Sandbox Code Playgroud)
描述 HiLog 的论文假设 Prolog 只有call/1
,没有call/3
。
但是,由于 Prolog(现在)有call/3
,maplist
可以很容易地在其中实现:
maplist(_, [], []).
maplist(P, [X|Xs], [Y|Ys]) :- call(P, X, Y), maplist(P, Xs, Ys).
Run Code Online (Sandbox Code Playgroud)
HiLog 是否主要具有历史意义,或者它的“高阶”逻辑是否比 Prolog 现在可用的更通用?