首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表中夫妻的PROLOG - LCM

列表中夫妻的PROLOG - LCM
EN

Stack Overflow用户
提问于 2018-07-04 19:56:55
回答 1查看 741关注 0票数 0

我想从列表中找到夫妻的最小公共倍数(LCM)。但以下列方式:

例如,如果我有以下列表:

L1 = 1,2,3,4,5

我想拿出这份清单:

L2 = 1,2,6,12,60

我使用L1的第一个元素作为L2的第一个元素,其余元素遵循以下形式:

代码语言:javascript
复制
L2[0] = L1[0]
L2[i+1] = lcm( L1[i+1] , L2[i] )

这是我到目前为止所做的,但不起作用。总是打印错误。

代码语言:javascript
复制
%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.

我想运行这个程序然后得到这个:

代码语言:javascript
复制
?- call_make([1,2,3,4,5], Result).
Result = [1,2,6,12,60].
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 21:28:36

附件/3正在使用两个列表进行连接,而这里:

代码语言:javascript
复制
append(List, R, Res),

R是一个标量。把它改成

代码语言:javascript
复制
append(List, [R], Res),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51180133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档