如果整数是素数,我有一个程序返回true,否则返回false。
但是,我使用了内置谓词'\ +‘,结果发现我不允许使用它,我怎么可能不使用它呢?
is_prime(2).
is_prime(3).
is_prime(P) :- P > 3, P mod 2 =\= 0, \+ has_factor(P,3).
has_factor(N,L) :- N mod L =:= 0.
has_factor(N,L) :- L * L < N, L2 is L + 2, has_factor(N,L2).
任何帮助都将不胜感激!
我需要编写一个Prolog谓词,以避免在列表中出现多次的冗余答案,如以下示例查询所示: ?- member(a, [a, b, a]).
true
?- member(X, [a, b, a]).
X = a ;
X = b ;
false.
?- member(X, [a, b, a, c, a, d, b]).
X = a ;
X = b ;
X = c ;
X = d ;
false. 我知道下面的代码会输出所有的代码,而不管重复的次数是多少: member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
workers(name(nasrin,sultana),eng,address(dhanmondi,city1,bangladesh),40).
workers(name(kabita,chy),doctor,address(motijheel,city1,bangladesh),35).
workers(name(nasima,akter),lecturer,address(agrabad,city2,bangladesh),30).
workers(name(afroja,sultana),doctor,address(gec,city2,bangladesh),45).
sa
我试图理解如何在Prolog中解决以下问题。给定以下Prolog代码,列出所有解决方案,以便查询c(X、Y、Z)。
a(1).
a(2).
b(a).
c(A,B,C) :- a(A),d(B,C).
c(A,B,C) :- b(A),d(B,C).
d(B,C) :- a(B),!,a(C).
d(B,_) :- b(B).
我自己加载了SWI Prolog来尝试它,但我不确定它是如何得出结论的:
X = Y, Y = Z, Z = 1 ;
X = Y, Y = 1,
Z = 2 ;
X = 2,
Y = Z, Z = 1 ;
X = Z, Z = 2,
Y = 1 ;
X = a,
Y =
我正在开发一个用Prolog编写的应用程序。我需要过滤一个元素列表,并删除那些不满足特定约束或条件的元素,同时保持原来的列表顺序。我认为最好的方法是这样做:
filter([],Filtered).
filter([L|List],[F|Filtered]) :-
/* Conditions are met: bypass the element to the filtered list */
check_conditions(L),
filter(List,Filtered).
filter([L|List],Filtered) :-
/* Condition
我正在使用SWI-Prolog学习Prolog。以下是我在fact.pl文件中的实践代码
factorial(N,F) :- N is 0, F is 1;
N > 0, M is N - 1, factorial(M,G), F is N*G.
当我尝试使用[fact.pl]加载此文件时,解释器显示以下错误:
?- [fact.pl].
ERROR: Syntax error: Operator expected
ERROR: [fact
ERROR: ** here **
ERROR: .pl] .
我不确定这是如何发生的,我很确定我所做的是标准的程序加载
我刚刚尝试在Prolog中实现绝对函数,我有一些奇怪的行为。我的代码是:
absval(X, RESULT) :- X >= 0, RESULT is X.
absval(X, RESULT) :- X < 0, RESULT is -X.
当我尝试使用SWI absval(-2,X).时,我得到
X = 2
yes
如预期的那样。但是,否则,当我调用absval(2,X)时,我会得到X = 2 ?,并且应该插入另一个输入。按回车后,我也会得到yes。
第二个结果是什么意思?我的解决方案怎么了?
我们班的一次老期末考试:
下面是一些prolog代码:
mystery(1, 1).
mystery(N, F) :-
N1 is N-1,
mystery(N1,F1),
F is F1*N.
问题1:在
mystery(3, P).
问题2:如果在Prolog生成并回答谜团后按下分号,解释器最终会报告"ERROR: Out of local堆栈“。为什么会发生这样的死亡,您如何修改神秘以避免错误?
问题1:我得到
P = 6 ?
问题2:如果我按分号来得到所有答案,我就会得到一个本地堆栈错误。我不知道这段代码想要完成什么,也不知道如何修复它,这样我就不会走
我是prolog的新手,正在尝试一些东西,特别是我在思考如何在Prolog中做一些特定的事情。我知道事实和规则,事实就是这类东西
specialCustomer(x). //person x is a specialcustomer
和规则:
totalSpend(x,500) :- specialCustomer(x). //if x spends 500, he is a special customer
这个事实和规则在prolog中是有效的吗?这条规则是错的吗?如何通过prolog查询?就像在调用
totalSpend(bob,500).
请容忍我,因为我对逻辑编程很陌生。我正在编写一个Prolog子句,如果另一个子句--get_cards_by_ single /3-返回一个只有一个元素的列表,该子句就会成功。但是,似乎每当我使用返回的列表时,都会再次单独调用子句get_cards_by_suit。我不知道为什么会发生这种事,我花了好几个小时想办法解决这个问题。
以下是我遇到麻烦的条款:
find_strongest_card(CardPile, TrumpSuit, StrongestCard, Reason) :-
%if there is one and only one trump suit cards in t