我正在嘗試開發一個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