我想檢查一下,如果元組串列 L (x1,y1) 具有函式屬性:
?(x1,y1),(x2,y2) ∈ L (x1=x2 ?? y1 = y2)
我試圖用以下謂詞解決它:
m_Function(L) :-
((member(M1, L), member(M2, L),
M1 = (X1, Y1), M2 = (X2, Y2), X1 = X2)
-> Y1 = Y2).
問題是,例如輸入
L = [(p, q), (p, r)]
結果為真。
我的除錯跟蹤表明我更準確地意識到了以下陳述句:
?(x1,y1),(x2,y2) ∈ L (x1=x2 ?? y1 = y2)
痕跡:
T Call: (8) m_Function([(p, q), (p, r)])
Call: (8) m_Function([(p, q), (p, r)]) ? creep
Call: (9) lists:member(_5074, [(p, q), (p, r)]) ? creep
Exit: (9) lists:member((p, q), [(p, q), (p, r)]) ? creep
Call: (9) lists:member(_5074, [(p, q), (p, r)]) ? creep
Exit: (9) lists:member((p, q), [(p, q), (p, r)]) ? creep
Call: (9) (p, q)=(_5060, _5062) ? creep
Exit: (9) (p, q)=(p, q) ? creep
Call: (9) (p, q)=(_5066, _5068) ? creep
Exit: (9) (p, q)=(p, q) ? creep
Call: (9) p=p ? creep
Exit: (9) p=p ? creep
Call: (9) q=q ? creep
Exit: (9) q=q ? creep
T Exit: (8) m_Function([(p, q), (p, r)])
Exit: (8) m_Function([(p, q), (p, r)]) ? creep
他們在序言中是否有一些優雅的方式,例如使用一些“for all”-量詞,我可以用它來解決這類問題?
uj5u.com熱心網友回復:
您可以使用forall/2.
m_Function(L) :-
forall((member((X, Y1), L), member((X, Y2), L)), Y1 == Y2).
forall(Condition, Action)如果對于 Condition 的所有替代系結,Action 都可以證明,則成功。它相當于\ (Condition, \ Action)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401147.html
下一篇:一次實體化多個物件的函式
