3

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

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).

有什么办法可以解决这个问题,还是我注定要使用大量的帮助谓词?

4

1 回答 1

4

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

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

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

于 2012-10-18T16:10:44.337 回答