我一直在尝试实现一种用于对数据记录程序进行半天真评估的算法,但是在任何地方都无法获得简单的答案来解释简单单词之间的差异。
根据我的理解,天真是一种自下而上的评估技术,半天真也是。
在第一次迭代中,两种评估技术都从一个空集开始。
随着迭代的进一步进行,最终都将产生迭代并生成元组,直到到达新的元组为止。
那么半幼稚是从规则的头还是身体开始的?
path (X,Y):- edge(X,Y).
path (X,Y):- edge(X,Z),path (Z,Y).
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下上述程序在每次迭代结束时如何更新EDB和IDB。元组是否存储在每个谓词下。就像边缘的单独列和路径的单独列一样,否则它们将被存储为集合。
全球和地方统一又有什么区别?
我必须在 Prolog 中创建家庭关系来完成一项作业,我偶然发现了这个问题。
man(john).
woman(lisa).
married(john,lisa).
?- married(john,X).
X = lisa.
?- married(X,john).
false.
Run Code Online (Sandbox Code Playgroud)
如何使这个谓词以两种方式起作用?如果约翰嫁给了丽莎,那么丽莎也嫁给了约翰。
对于事实,我只能使用性别、父母和已婚:
man(john).
woman(lisa).
parent(john,steve).
parent(lisa,steve).
married(john,lisa).
Run Code Online (Sandbox Code Playgroud)
这个要求使得这个解决方案对我来说无法使用。我不能只添加关系,wife(lisa,john).因为我必须自己定义妻子、丈夫等。
wife(X,Y) :- woman(X),married(X,Y).
Run Code Online (Sandbox Code Playgroud) 例如,
第一个是这样的:
sum(X,Y,Result):- Result is X + Y.
Run Code Online (Sandbox Code Playgroud)
第二个是:
times(X,Y,R):- R is X * Y.
Run Code Online (Sandbox Code Playgroud)
我甚至可以这样定义它们吗?如果我想写一个比较两个结果的值的东西,我该怎么办?当我尝试做类似的事情时sum(X,Y,R1) > times(X,Y,R2),它不允许我.我想编写一个真实的程序R1 > R2.在这种情况下,我想得到和的X和Y的X和Y,并找出哪个值更大.我怎么能这样做?
我知道:
Nick = 2*Kate
(Kate + Lea)= 2*Nick
(Chris + Nick)= 2*(Kate + Lea)
Ashley = 24
Ashley + Kate + Lea = 2*(Chris + Nick)
取消一些后,我发现:
Ashley = 12*Kate => Kate = 2
Lea = 3*Kate => Lea = 6
Nick = 2*Kate => Nick = 4
Chris = 6*Kate => Chris = 12
我试过这个:
:- use_module(library(clpfd)).
ages(As) :-
As = [Ashley, Lea, Nick, Chris, Kate],
Ashley #= 24,
12 * Kate #= Ashley,
Lea #= 3*Kate,
Nick #= …Run Code Online (Sandbox Code Playgroud) 我在大学期间使用Prolog语言进行考试,但我不知道如何创建函数:检查列表中的唯一值。我的意思是,如果列表中的每个值都是唯一函数,则返回true,否则返回false。例如。
[1,2,3,5] - true
[1,2,2,4] - false
Run Code Online (Sandbox Code Playgroud)
该函数的标题是uniqueValues(X)X-均值列表。我真的不懂这种语言,如果有人可以向我解释如何创建此功能,那将是很好的。感谢您的帮助
我试图在Prolog中做一个平均值的谓词,但是我遇到了一些问题,
它被称为平均值(N,X),其中N是数字,X是从1到N的平均值的结果.
我试过这样做,但它并不总是很好用:
average(1,1).
average(N,X) :- K is N-1 ,K>1 , average(K,S1) , X is /(+(S1,N),N).
average(N,X) :- K is N-1 ,K=:=1 , average(K,S1) , X is +(S1,N).
Run Code Online (Sandbox Code Playgroud)
一些帮助 ?