我是Prolog的新手(也许是几个小时),我收到这些错误和警告,最重要的是请告诉我如何解决这个错误及其来源.
这种语言太模糊了.
谢谢.
:- redefine_system_predicate(legalTime(T)).
legalTime(T,[T|_]).
legalTime(T,[_|S]) :- legalTime(T,S).
:- redefine_system_predicate(subset(_,_)).
subset([],_).
subset([T|S],K) :- legalTime(T,K), subset(S,K).
disjoint([],_).
disjoint([T|S],K) :- not(legalTime(T,K)), disjoint(S,K).
:- redefine_system_predicate(union(_,_,_)).
union(L,K,M) :- append(L,K,M).
:- redefine_system_predicate(intersection(_,_,_)).
intersection([],_,[]).
intersection([T|S],K,M) :-not(legalTime(X,K)), intersection(S,K,M).
intersection([T|S],K,[X|M]) :- legalTime(T,K), intersection(S,K,M).
difference([],_,[]).
difference([T|S],K,M) :- legalTime(X,K), difference(S,K,M).
difference([X|L],K,[X|M]) :- not(legalTime(X,K)), difference(L,K,M).
:- redefine_system_predicate(legal_Schedule(X)).
legal_Schedule(X,[X|_]).
legal_Schedule(X,[_|S]) :- legal_Schedule(X,S).
Schedule(C, R, between(S, E)) :- Schedule(C, R, between(S, E)), between(S, E).
Schedule(C, R, between(S, E)) :- Schedule(C, R, between(S, E)), C depends on R.
Schedule(C, R, between(S, E)) …
Run Code Online (Sandbox Code Playgroud) 如何编写 prolog 程序以使用 conc 操作从 prolog 中的 List 中修剪前 N 个元素。
trim(L1,N,L2) which is true if L2 contains the first N elements of L1
Run Code Online (Sandbox Code Playgroud)
有人能帮帮我吗。
这是我的答案,正确吗?
trim(L1, N, L2):- conc(L2,T,L1), length(L2,N),length(L1,N2), N2>= N
Run Code Online (Sandbox Code Playgroud) 我即将在Prolog中实现逻辑术语的证明者.我当前的代码并不是真的可以呈现,因此,我只是说,我想要我的程序做什么,希望你可以给我一些很好的建议:)
它应该采用变量列表(也就是说逻辑参数),其次是包含这些参数的逻辑公式(例如'not'(A 'and' B) 'or' 'not'(B 'and' C) 'or' ...
,依此类推).
作为输出,我希望我的程序能够以可能的一致性分配进行响应.单个参数可以是true(1
)或false(0
).
所以我的目标是回归A=0, B=0, C=0 ; A=1
等等.
我很高兴有关我的计划的每一个帮助:)
刚刚开始学习Prolog,我不知道为什么我会收到这个错误.我无法理解我能做些什么.
这是'代码':
?- assert(likes(a , beaf)).
?- assert(likes(b , nuduls)).
?- assert(likes(b , hotdog)).
?- assert(likes(c , sandwicth)).
?- assert(likes(c , bargar).
?- assert(likes(d , juice)).
?- assert(likes(d , chicken_curry)).
?- assert(likes(d , nudules)).
?- assert(likes(e , brade)).
?- assert(likes(e , butter)).
?- assert(likes(e , bargar)).
?- friend(e,d).
?- friend(d,a).
?- friend(d,b).
?- friend(d ,c).
?- highlyrecommended(X,L):-friend(X,Y),likes(Y,L).
?- recommended(X,L):-friend(X,Z),friend(Z,Y),likes(Y,L).
?- Is d is the friend of e ?
?- Y
?- Is e is the friend of c ?
?- …
Run Code Online (Sandbox Code Playgroud) mergealt(X,Y,Z)
如果列表Z是列表X和Y中的备用元素的合并,我需要编写一个成功的Prolog谓词.
输入和输出如下:
?- mergealt([1,2,3,4],[6,7,8],Z).
Z = [1, 7, 3] .
?- mergealt([1,2,3,4],[6,7,8,9],Z).
Z = [1, 7, 3, 9] .
?- mergealt([1,2,3,4],[6,7,8,9,10],Z).
Z = [1, 7, 3, 9] .
Run Code Online (Sandbox Code Playgroud)
我真的不明白递归.我怎样才能开始解决这个问题?