Prolog中的模式匹配类型

时间:2012-10-18 16:03:56

标签: 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):-
    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).

有没有办法绕过这个或者我注定要使用大量的帮助谓词?

1 个答案:

答案 0 :(得分:3)

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

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

会产生Name = alpha,X = 1,Y = 2.