Prolog中的模式匹配类型

Prolog中的模式匹配类型,prolog,pattern-matching,Prolog,Pattern Matching,假设我有一个列表,如下所示: List=[alpha(1,2),beta(3,4),gamma(4,1)] 好的,我想在这里做一个特定的模式匹配。。。我知道我能做到: Try=alpha(Y,Z). Try=alpha(1,2) Y=1 Z=2 但我想做一个例子: Try=X(Y,Z) X=alpha Y=1 Z=2 …以便我可以将数据传递给另一个谓词: targetPredicate(Type,Value1,Value2):- Ty

假设我有一个列表,如下所示:

List=[alpha(1,2),beta(3,4),gamma(4,1)]
好的,我想在这里做一个特定的模式匹配。。。我知道我能做到:

Try=alpha(Y,Z).
    Try=alpha(1,2)
    Y=1
    Z=2
但我想做一个例子:

Try=X(Y,Z)
    X=alpha
    Y=1
    Z=2
…以便我可以将数据传递给另一个谓词:

targetPredicate(Type,Value1,Value2):-
    Type=alpha
    ...
然后用它做点什么,而不是为我可能遇到的每种类型都做一个帮助谓词:

helpPredicate(Input):-
    Input=alpha(Value1, Value2),
    targetPredicateAlt(Value1, Value2).

helpPredicate(Input):-
    Input=beta(Value1, Value2),
    targetPredicateAlt(Value1, Value2).

helpPredicate(Input):-
    Input=gamma(Value1, Value2),
    targetPredicateAlt(Value1, Value2).
有没有办法绕过这个问题,或者我注定要使用大量的帮助谓词?

您可以使用谓词
=../2
: 假设你有
Try=alpha(1,2)
,那么

Try =..[Name, X, Y].

将产生Name=alpha,X=1,Y=2。

这是一个快速、快速且易于理解的答案。。我几乎觉得自己像个傻瓜。。然而,这对我帮助很大!非常感谢。