在SWI Prolog终端中,如何查看当前工作目录并更改当前工作目录?
我发现:
working_directory(CWD,CWD)
但我不认为它是我需要的
我想将这个简单的东西加载到我的编辑器中:
Write:-repeat,write("hi"),nl,fail.
Run Code Online (Sandbox Code Playgroud)
所以它打印"hi".
我该怎么办?
我现在正在尝试做 File->New
并保存名为Write的文件 E:\Program Files\pl\xpce\prolog\lib
在进行查询时:
?-写.
这是打印:
1 ?- Write.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Run Code Online (Sandbox Code Playgroud)
为什么?
我需要统计所有这些X,some_predicate(X)而且真的有很多这样的X.最好的方法是什么?
第一个线索是找到所有,累积到列表并返回它的长度.
countAllStuff( X ) :-
findall( Y
, permutation( [1,2,3,4,5,6,7,8,9,10], Y )
, List
),
length( List, X ).
Run Code Online (Sandbox Code Playgroud)
(permutation/2仅显示存在许多变体的示例,并且收集所有变量的方法很糟糕)
显然,我有堆栈溢出.
?- countAllStuff( X ).
ERROR: Out of global stack
Run Code Online (Sandbox Code Playgroud)
不是,我试图取代findall以setof并没有什么变化.
最后,我创建了aggregate(可点击的)谓词并尝试使用它.
?- aggregate(count, permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 .
?- aggregate(count, [1,2,3,4], permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 ; …Run Code Online (Sandbox Code Playgroud) 我想在没有安装prolog的机器上运行swi-prolog程序(实际上是服务器).
序言代码swipl_test.pl:
main :- write('Hello, world\n').
Run Code Online (Sandbox Code Playgroud)
在本地机器4.4.0-64-generic #85~14.04.1-Ubuntu SMP Mon Feb 20 12:10:54 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux制作二进制hello有SWI-Prolog version 7.2.3 for amd64:
swipl --goal=main --toplevel=halt --stand_alone=true --foreign=save -o hello1 -c swipl_test.pl
Run Code Online (Sandbox Code Playgroud)
移动hello远程计算机2.6.32-5-amd64 #1 SMP Wed Jun 17 16:09:06 UTC 2015 x86_64 GNU/Linux会出现以下错误:
error while loading shared libraries: libswipl.so.7.2: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何从prolog代码中准备一个自包含的二进制文件?我在远程计算机上没有sudo权限.
如何使用SWI-Prolog语义Web库查询OWL/RDF文件并提取一些信息?
OWL/RDF文件包含有关所有Debian软件包的信息,因此我需要进行查询以查找软件包依赖项.
例如:
OWL文件的结构如下:
package: A
Depends:
package: B
pacakge: C
Run Code Online (Sandbox Code Playgroud)
如何将OWL/RDF文件加载到Prolog脚本中,在Prolog脚本中进行查询的语法是什么,以便将A作为参数并且脚本输出B和C?
我想知道是否存在可以绘制Prolog程序的逐步搜索树的工具?谢谢.
我想知道与其他程序员共享Prolog代码/库的最佳实践(以及多个项目之间的自己).我自己也在使用SWI-Prolog,但也对其他Prolog如何解决这个问题感兴趣.
相比之下,Java有Maven + JAR,Python有EasyInstall + PythonEggs,其他语言可能还有很多其他语言.但Prolog还有吗?
在SWI-Prolog中有Packs,由模块支持library(prolog_pack).这些的缺点是:
另一种我直到现在使用过的方法是Git子模块.通过将一个存储库导入另一个存储库来实现库之间的依赖关系.这与SWI-Prolog包有一些相同的缺点:
我个人对完美的Prolog代码共享方法的偏好是:
以上暗示我理想的库共享方法是基于文件的,而不是基于包的.如果Prolog模块A使用Prolog模块B并且加载了A,则从本地文件(如果存在)加载B或从存储库下载B. 我不确定基于文件的方法在其他语言中有多常见.前面提到的Maven + JAR和EasyInstall + PythonEggs都是基于包的.
我对其他Prolog程序员使用和思考这个主题非常感兴趣!
我希望看到(SWI)Prolog宣传为NoSQL'认真的竞争者'.
(SWI)Prolog拥有令人敬畏的数据绑定功能,当然还有很多功能来编写针对这些大数据的逻辑.
随着最近的PLGI贡献,编写一个复杂的Gnome GUI变得非常简单...... NoSQL研究员最期待哪些功能?RDF的反应性CRUD如何发声?
我已经测试了运行几个Gnome接口的PLGI - 像GtkClutter这样的标准,或者像graph_gtk一样自编(图形编辑器,我从图 -gtk 移植它,同时学习本机GIntrospection和GObject/GtkWidgets基础......我想我'我准备以声明的方式绑定Gtk - 或者通常是GObjects.
这是一个已经删除的问题答案引发的问题.该问题可归纳如下:
是否可以折叠列表,折叠时生成列表的尾部?
这就是我的意思.假设我想计算阶乘(这是一个愚蠢的例子,但它仅用于演示),并决定这样做:
fac_a(N, F) :-
must_be(nonneg, N),
( N =< 1
-> F = 1
; numlist(2, N, [H|T]),
foldl(multiplication, T, H, F)
).
multiplication(X, Y, Z) :-
Z is Y * X.
Run Code Online (Sandbox Code Playgroud)
在这里,我需要生成我给出的列表foldl.但是,我可以在常量内存中执行相同的操作(不生成列表而不使用foldl):
fac_b(N, F) :-
must_be(nonneg, N),
( N =< 1
-> F = 1
; fac_b_1(2, N, 2, F)
).
fac_b_1(X, N, Acc, F) :-
( X < N
-> succ(X, X1),
Acc1 is X1 * Acc,
fac_b_1(X1, N, Acc1, …Run Code Online (Sandbox Code Playgroud) swi-prolog ×10
prolog ×7
rdf ×2
binaryfiles ×1
database ×1
fold ×1
module ×1
owl ×1
plgi ×1
procedure ×1
python ×1
search-tree ×1
semantic-web ×1