我正在尝试开发一个prolog过程,它将使用univ(=..
)将任何给定列表中的数字转换为它们的平方根列表。到目前为止,我有在Prolog中使用univ运算符
convert(X,Y): number(X), Y is X^2.
use([],_,[]).
use([_|X],convert,L):-
convert(X,Y),
L =..[convert,X,Y].
这评估假,什么可能是错误的我的逻辑或执行?
我正在尝试开发一个prolog过程,它将使用univ(=..
)将任何给定列表中的数字转换为它们的平方根列表。到目前为止,我有在Prolog中使用univ运算符
convert(X,Y): number(X), Y is X^2.
use([],_,[]).
use([_|X],convert,L):-
convert(X,Y),
L =..[convert,X,Y].
这评估假,什么可能是错误的我的逻辑或执行?
有多个错误:
L = convert(X,Y)
这只会分配到atom convert(X,Y)
L.你不需要操作者=..
,作为一个简单的解决办法是:
convert(X,Y):- number(X), Y is X^2.
use([],[]).
use([H|T],[Y|T1]):-
convert(H,Y),
use(T,T1).
你的代码在第一行的':'后面缺少'-'。而使用/ 2的第一个目标应该是'convert(H,Y)'--) – tas
@tas,谢谢!!!这些都是使用复制粘贴时的问题:)! – coder
谢谢我将使用use,我不知道这个谓词。 – user8291645
你也可以使用maplist/3
定义use/2
与convert/2
在您的文章中定义:
use(X,Y) :- maplist(convert, X, Y).
?- use([1,2,3],L).
L = [1,4,9]
注意use/2
简直是失败对于包含任何东西,但数字清单:
?- use([1,2,3,a],L).
no
错字:convert(X,Y):number(X)...' - >'convert(X,Y): - number(X)...'。你是指平方根或正方形?你的代码正在做广场。你为什么使用'= ../2'?目的是提供术语和列表之间的等价关系。目前还不清楚你认为这会如何解决你的问题。 – lurker