我在prolog中有一个列表,其中包含几个项目。我需要‘规范化’这个列表的内容,并将结果写入一个新的列表。但我在做这件事上仍然有问题。下面的代码显示了我是如何做到这一点的:
normalizeLists(SourceList, DestList) :-
% get all the member of the source list, one by one
member(Item, SourceList),
% normalize the item
normalizeItem(Item, NormItem),
% add the normalize Item to the De
我需要在Prolog中特别使用writeln,其中包含一个变量。我试图做的是一个错误,它接受了列表中的第一个元素,并且格式化完成了我所需要的几乎完美的工作,但是同样的,它特别需要写。
我做了一段时间的实验,并尝试使用“+”来连接字符串,就像它在其他语言中的工作方式一样,以及当我使用它时
writeln("ERROR: \"" + Head + "\" is invalid.")
我几乎在我想要的东西上成功了,它印出来了
ERROR: " + a + " is invalid.
在我试图获得的变量'a‘突出显示(另一个要
我想在Prolog中解决这个问题。我想给出一个自然数列表,以找到满足这个条件的列表中的所有元素:
All elements on the left of it are smaller than it and all the elements on the right of it are larger than it.
例如,给出一个列表[3,2,4,1,5,7,8,9,10,8],答案是5,7
到目前为止,我已经成功地实现了这样一个函数:给定列表中的一个元素,如果该元素满足上述条件,它将返回true或false。
check(Elem, List) :-
seperate(Elem,
我一直在阅读的答案和评论,我试着将给出的解释应用于Bratko的一个例子(Prolog编程为人工智能,第130页),但我不确定我是否完全理解它。下面介绍了这个例子:
我阅读了树和代码如下:
在目标列表中,C :- P, Q, R, !, S, T, U. Prolog将一个接一个地尝试实例化变量,就像往常一样,最终到达true.。假设为P和Q找到了一个值,而R上的第一次尝试失败了,那么Prolog可以追溯到找到P和Q的情况,如果可用的话,再尝试R的另一个选项。但是,如果同时发现了R (导致P, Q, R = true.),并且!一如既往地成功了,那么我们就会丢弃任何选择点,从此就没有
所以我想
我正在用is_a(b, a), is_a(c, a)定义集合,为了简单起见,它在视觉上看起来如下所示:
a
b c
d e f g
我想给出列表[b, c],因此得到列表[d, e, f, g]
当我给出一个node或变量时,它可以使用以下方法找到它下面的所有内容:
find_nodes(Root, Root) :-
\+ is_a(_, Root).
find_nodes(Root, X) :-
is_a(Node, Root),
find_nodes(Node, X).
当我跑步时,我需要的结果是:
?- find_
我对prolog还不熟悉,我就是搞不懂。
我试图构建一个简单的程序,该程序接收谓词列表,搜索列表中的特定谓词,并将函数应用于该谓词的参数。
类似于这样的东西:
?- program([pred1(a,b,p), pred2(d,b,p), pred2 (a,c,p)]).
program (list1) :-
search(pred2(X,Y,p),list1).
doSomething (X,Y) % with the X and Y returned from search function, both of them.
基本上,我希望使用从目标search(pred2(X,Y,p)
我在努力解决骑士之旅的问题。我想调用一个规则来评估可能的移动,但是我不能这样做,我的规则返回我发送的变量中的下一个位置。
move(X,Y):-
X is X+1,
Y is Y-2.
move(X,Y):-
X is X+2,
Y is Y-1.
例如,在控制台中我发送了move(2,2),我希望返回3,0和4,1,但返回false。