Lambda 如何编写谓词双列表(L,R)?

Lambda 如何编写谓词双列表(L,R)?,lambda,prolog,Lambda,Prolog,如何编写谓词doublelistL,R和L是数字列表,R也是一个列表,长度与L相同,每个元素都是加倍的 例如: ?- doublelist([-1, 0, 3], L). L = [-2, 0, 6]. 我是一个prolog初学者,我自己写一个很困惑。请帮助。首先写下你的例子: double_list([-1,0,3],[-2,0,6]). 这是一个非常有效的序言。您可以在各种方向上使用它: ?- double_list([-1,0,3],L). L = [-2,0,6]. ?- do

如何编写谓词doublelistL,R和L是数字列表,R也是一个列表,长度与L相同,每个元素都是加倍的

例如:

?- doublelist([-1, 0, 3], L).  
L = [-2, 0, 6].

我是一个prolog初学者,我自己写一个很困惑。请帮助。

首先写下你的例子:

double_list([-1,0,3],[-2,0,6]).
这是一个非常有效的序言。您可以在各种方向上使用它:

?- double_list([-1,0,3],L).
L = [-2,0,6].

?- double_list([-1,0,3],[-2,0,6]).
Yes.
所以,现在你需要让它更一般化。第一步,写下它的含义:

double_list([-1,0,3],[-2,0,6]):-
    (-2) is 2*(-1),
    0    is 2*???,
    6    is ?????.
下一步,用变量替换数字:

double_list([-1,0,3],[-2,0,6]):-
    A1 is (-1), B1 is (-2), B1 is 2*A1,
    A2 ????,    B2 ????,    B2 is 2*??,
    A3 ????,    B3 ????,    B3 ???????.
你能继续吗?你看到图案了吗

double_list([X1,X2,X3],[Y1,Y2,Y3]):-
    ......
现在有了一个谓词,它适用于所有长度为3的列表。那么

double_list([X1 | T1], [Y1 | Z1]):-
    ......

double_list( [], ZN) :- ZN = ???? .

首先写下你的例子:

double_list([-1,0,3],[-2,0,6]).
这是一个非常有效的序言。您可以在各种方向上使用它:

?- double_list([-1,0,3],L).
L = [-2,0,6].

?- double_list([-1,0,3],[-2,0,6]).
Yes.
所以,现在你需要让它更一般化。第一步,写下它的含义:

double_list([-1,0,3],[-2,0,6]):-
    (-2) is 2*(-1),
    0    is 2*???,
    6    is ?????.
下一步,用变量替换数字:

double_list([-1,0,3],[-2,0,6]):-
    A1 is (-1), B1 is (-2), B1 is 2*A1,
    A2 ????,    B2 ????,    B2 is 2*??,
    A3 ????,    B3 ????,    B3 ???????.
你能继续吗?你看到图案了吗

double_list([X1,X2,X3],[Y1,Y2,Y3]):-
    ......
现在有了一个谓词,它适用于所有长度为3的列表。那么

double_list([X1 | T1], [Y1 | Z1]):-
    ......

double_list( [], ZN) :- ZN = ???? .
这将使用中定义的高阶谓词和lambda表达式

这将使用。

中定义的高阶谓词和lambda表达式,或仅使用

double_list(Is,Ds) :- findall(D,(member(I,Is),D is 2*I),Ds).
适用于那些对地图列表感到不舒服的人。

或只需使用

double_list(Is,Ds) :- findall(D,(member(I,Is),D is 2*I),Ds).

对于那些对地图列表感到不舒服的人。

请向我们展示您最近一次失败的尝试。请向我们展示您最近一次失败的尝试。双列表[X1 | T1],[Y1 | Z1]:-Y1是2*X1,双列表T1,Z1。双_列表[],ZN:-ZN=[]。是吗?双|列表[X1 | T1],[Y1 | Z1]:-Y1是2*X1,双|列表T1,Z1。双_列表[],ZN:-ZN=[]。是这样吗?