小编Pau*_*ura的帖子

在Prolog中将列表拆分为两个长度相等的列表

我正在Prolog中编写一个谓词,将列表分成两个相等长度的列表.例如 :

div([1,2,3,4] , X , Y).
X = [1,2].
Y = [3,4].
Run Code Online (Sandbox Code Playgroud)

这是我的代码,但它不起作用:

div(L , L1 , L):- length(L) == length(L1).
div([ H | T ] , [ H | T1] , L2):- div(T , T1 , L2).
Run Code Online (Sandbox Code Playgroud)

prolog

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

Prolog - 意外的文件结束

在Prolog错误中读取文件

嗨,我正在研究一个Prolog项目,我需要读取整个文件.我有一个名为'meno.txt'的文件,我需要阅读它.我在堆栈上找到了一些代码.代码如下:

main :-
  open('meno.txt', read, Str),
  read_file(Str,Lines),
  close(Str),
  write(Lines), nl.


read_file(Stream,[]) :-
    at_end_of_stream(Stream).


read_file(Stream,[X|L]) :-
    \+ at_end_of_stream(Stream),
    read(Stream,X),
    read_file(Stream,L).
Run Code Online (Sandbox Code Playgroud)

当我调用main/0谓词时,我收到一个错误,指出文件意外结束.我的文件看起来像这样:

line1
line2
line3
line4
Run Code Online (Sandbox Code Playgroud)

我在这里也发现了类似的问题以及ASCII和UTF编码的解决方案,但我尝试过,看起来它不是我的解决方案.有人可以帮忙吗?

io input prolog

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

OS X 的 SWI-Prolog 编辑器

我正在寻找适用于 Mac OS X 的 SWI-Prolog 编辑器,但我找不到,那么有没有或者我必须使用另一个编辑器来构建 Prolog 文件?

谢谢

macos prolog swi-prolog

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

Prolog - 比较两个数字

例如,我有一些代表数字 1 到 4 的原子。

喜欢

number(one).
number(two).
number(three).
number(four).
Run Code Online (Sandbox Code Playgroud)

现在我必须编写一个谓词来检查第一个数字是否大于第二个数字。

istBiggerThen(X,Y) :-
    (  X < Y
       -> true
       ;  false
    ).
Run Code Online (Sandbox Code Playgroud)

但现在我只能问诸如此类

isBiggerThan(3,4).
Run Code Online (Sandbox Code Playgroud)

但是我要

isBiggerThan(three,four).
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?请帮助我:) 提前致谢。

prolog

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

在Prolog中获取列表的第二个元素

遇到这个任务有些麻烦.

目前我已经尝试了这个,我知道这是错误的,因为我不确定如何将L分为头部和尾部,但这是我想要的那种想法.

second(L,E) :- [H | E | T]
Run Code Online (Sandbox Code Playgroud)

我认为E必须在头部之后才能成为第二个元素.不过我是这门语言的新手,想要一些见解.如何从谓词的编写方式中获得这个头和尾.对此问题的一些见解将非常感激.谢谢.

prolog

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

如果列表在Prolog中的大小为1则告诉

我是prolog的新手,我正在尝试编写一个谓词,以便我可以判断一个列表是否是一个大小的列表.目前我有这个:

one([H | T]) :- H \= [] ,T == [].
Run Code Online (Sandbox Code Playgroud)

这有问题,至少我的逻辑是,如果H它不是空的并且尾部没有任何东西,则必须是头部中存在某些东西并因此具有一个大小的情况.否则它没有.

非常感谢您解决此问题的一些见解.

prolog

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

在Prolog中丢弃

我正在努力理解Prolog中的递归,但它肯定与其他语言中的递归不同(我使用PHP,Java和C,只是说).

所以,是的,我一直在阅读有关它的所有教程,但我仍然没有得到具体的,相当复杂的案例.

例如,为了获得列表中元素的出现次数,我们有:

occurrence([], _, 0).
occurrence([H | T], H, N) :- !, occurrence(T, H, N1), N is N1 + 1.
occurrence([_ | T], H, N) :- occurrence(T, H, N).
Run Code Online (Sandbox Code Playgroud)

可以使用以下方式调用:

occurrence([1,4,9,1,2],1,R).
Run Code Online (Sandbox Code Playgroud)

它应该导致:

?- R=2
Run Code Online (Sandbox Code Playgroud)

现在,为什么第3行甚至会发生?它在做什么?我写了这个程序而没有看到答案,我在第二行之后完成了.当然,它不会工作.

另一方面,为什么在那里发生"切割"?比如,我一直试图在每次通话后打印出结果,我只是越来越困惑.

recursion prolog

0
推荐指数
1
解决办法
72
查看次数

标签 统计

prolog ×7

input ×1

io ×1

macos ×1

recursion ×1

swi-prolog ×1