像prolog中的模式匹配列表

时间:2016-05-19 14:22:23

标签: 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只包含变量。

1 个答案:

答案 0 :(得分:0)

我们只是在变量列表的尾部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提及in the comments)。