PROLOG - 列表中夫妻的 LCM
PROLOG - LCM of couples in list
我想从列表中找出夫妻的最小公倍数 (LCM)。但是通过以下方式:
例如,如果我有这个列表:
L1 = [1,2,3,4,5].
我要生成此列表:
L2 = [1,2,6,12,60].
我使用L1的第一个元素作为L2的第一个元素,其余的遵循这种形式:
L2[0] = L1[0]
L2[i+1] = lcm( L1[i+1] , L2[i] )
这是我到目前为止所做的,但它不起作用。总是打印错误。
%CALL_MAKE----------------------------------------
%Using call_make to append Hd to L2 list
call_make([Hd|Tail], Result) :-
make_table(Tail, [Hd], Result).
%MAKE_TABLE---------------------------------------
%Using make_table to create the rest L2
make_table([],Res,Res).
make_table([Head|Tail], List, Result) :-
my_last(X, List),
lcm(Head, X, R),
append(List, R, Res),
make_table(Tail, Res, Result).
%last element of a list---------------------------
my_last(X,[X]).
my_last(X,[_|L]):- my_last(X, L).
%GCD----------------------------------------------
gcd(X, 0, X) :- !.
gcd(X, Y, Z) :-
H is X rem Y,
gcd(Y, H, Z).
%LCM----------------------------------------------
lcm(X,Y,LCM):-
gcd(X,Y,GCD),
LCM is X*Y//GCD.
我想要运行程序并得到这个:
?- call_make([1,2,3,4,5], Result).
Result = [1,2,6,12,60].
append/3 正在连接两个列表,而这里:
append(List, R, Res),
R
是标量。将其更改为
append(List, [R], Res),
我想从列表中找出夫妻的最小公倍数 (LCM)。但是通过以下方式:
例如,如果我有这个列表:
L1 = [1,2,3,4,5].
我要生成此列表:
L2 = [1,2,6,12,60].
我使用L1的第一个元素作为L2的第一个元素,其余的遵循这种形式:
L2[0] = L1[0]
L2[i+1] = lcm( L1[i+1] , L2[i] )
这是我到目前为止所做的,但它不起作用。总是打印错误。
%CALL_MAKE----------------------------------------
%Using call_make to append Hd to L2 list
call_make([Hd|Tail], Result) :-
make_table(Tail, [Hd], Result).
%MAKE_TABLE---------------------------------------
%Using make_table to create the rest L2
make_table([],Res,Res).
make_table([Head|Tail], List, Result) :-
my_last(X, List),
lcm(Head, X, R),
append(List, R, Res),
make_table(Tail, Res, Result).
%last element of a list---------------------------
my_last(X,[X]).
my_last(X,[_|L]):- my_last(X, L).
%GCD----------------------------------------------
gcd(X, 0, X) :- !.
gcd(X, Y, Z) :-
H is X rem Y,
gcd(Y, H, Z).
%LCM----------------------------------------------
lcm(X,Y,LCM):-
gcd(X,Y,GCD),
LCM is X*Y//GCD.
我想要运行程序并得到这个:
?- call_make([1,2,3,4,5], Result).
Result = [1,2,6,12,60].
append/3 正在连接两个列表,而这里:
append(List, R, Res),
R
是标量。将其更改为
append(List, [R], Res),