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

类似于prolog中的模式匹配列表,prolog,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,u,ExtendedList),然后进行模式匹配,ExtendedList=Data。合同签订后,我们得到: mat

[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,u,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 ?- 
(已经提到了使用)。

我们只需在变量列表的尾部“插入自由变量”,添加(变量,扩展列表),然后进行模式匹配,
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 ?- 

(已经提到了使用)。

看起来你在“重载”你这里所说的
L
。因此,这使得“如何做”的问题有点不清楚(您没有显示完整的查询)。我假设您有一个变量列表,
L
,然后是另一个要与前面的列表统一的列表
M=[1,2,3,4,5,6,7],L=[A,B,C,D],append(L,u,M)。
将通过
D
生成
A
的结果
L
可以是任意长度的变量列表。当然,如果
L
的长度超过
M
的长度,它会像预期的那样失败。这将是
L=[1,2,3,4,5,6,7],L=[A,B,C,D | |]
看起来你在“重载”你这里所说的
L
。因此,这使得“如何做”的问题有点不清楚(您没有显示完整的查询)。我假设您有一个变量列表,
L
,然后是另一个要与前面的列表统一的列表
M=[1,2,3,4,5,6,7],L=[A,B,C,D],append(L,u,M)。
将通过
D
生成
A
的结果
L
可以是任意长度的变量列表。当然,如果
L
的长度超过
M
的长度,它会像预期的那样失败。它将是
L=[1,2,3,4,5,6,7],L=[A,B,C,D ||]