类似于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 ||]