我正在尝试开发一个prolog程序,它将使用univ(=..
)将任何给定列表中的数字转换为它们的平方根列表。到目前为止我已经
convert(X,Y): number(X), Y is X^2.
use([],_,[]).
use([_|X],convert,L):-
convert(X,Y),
L =..[convert,X,Y].
这会判断为false,我的逻辑或执行可能出错?
答案 0 :(得分:4)
您还可以使用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
答案 1 :(得分:2)
有多个错误:
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).