PROLOG - LCM пар в списке - PullRequest
       26

PROLOG - LCM пар в списке

0 голосов
/ 04 июля 2018

Я хочу найти наименее общее множество (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].

1 Ответ

0 голосов
/ 05 июля 2018

append / 3 использует два списка для объединения, в то время как здесь:

append(List, R, Res),

R - это скаляр. Измените его на

append(List, [R], Res),
...