类似于prolog中的模式匹配列表



[A,B,C|_] = [1,2,3,4,5,6,7] A = 1 B = 2 C = 3.我预料到了这个结果。然而,当我有:

L = [A,B,C,D]  

如何操作:

L = [1,2,3,4,5,6,7]  
A = 1
B = 2
C = 3
D = 4 

问题是我不知道L有多长。我只知道:L比右侧列表短,而L只包含变量。

我们只是在变量列表的尾部append(Vars, _, ExtendedList)"插入自由变量",然后是模式匹配ExtendedList = Data。合同,我们得到:

match_vars(Vars, Data):-
    append(Vars, _, Data).

测试:

2 ?- match_vars([A,B],[1,2,3,4,5]).
A = 1,
B = 2.
3 ?- match_vars([A,B,C,D],[1,2,3,4,5]).
A = 1,
B = 2,
C = 3,
D = 4.
4 ?- 

(评论中已经提到使用append/3

最新更新