我想检查元组列表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
他们在序言中是否有一些优雅的方式,例如使用一些“所有人”量词,我可以用它们来解决这类问题?