【问题标题】:Prolog Combining Two ListsProlog 结合两个列表
【发布时间】:2013-02-07 17:30:38
【问题描述】:

我是 prolog 的新手,希望对以下问题提供任何帮助:

我需要编写一个程序来接受两个列表并将第二个附加到第一个并显示这个新列表及其长度。我知道 prolog 可能有一些内置函数可以让这一切变得更容易......但我不想使用这些。

例如:newlist([a,b,c],[d,e,f],L3,Le). 将返回 L3=[a,b,c,d,e,f]Le=6

这是我目前所拥有的:

newlist([],List,List,0) 

newlist([Element|List1],List2,[Element|List3],L) :- newlist(List1,List2,List3, LT), L is LT + 1.

这会正确附加,但我只能获得第一个列表的长度,而不是组合列表的长度。有没有办法让我将第二个列表的长度添加到第一个列表中以获得组合列表长度?

谢谢,如果这个问题很简单,我很抱歉……我是新手。

【问题讨论】:

    标签: list prolog append


    【解决方案1】:

    有没有办法让我将第二个列表的长度添加到第一个列表中以获得组合列表长度?

    你应该替换:

    newlist([],List,List,0).
    

    与:

    newlist([],List,List,X):-length(List,X).
    

    【讨论】:

    • 不幸的是,当我这样做时,我得到一个存在错误。您是否假设我已经定义了长度?
    • 它是大多数 prolog 环境中的内置谓词。但是,如果不是,您可以使用与为 newlist 所做的非常相似的方式来定义它。
    • 你也可以用一种奇怪的方式使用newlist,把它变成一种length。但是恕我直言,这不是很优雅。
    • 但请注意,新谓词需要做更多的工作,因为它还需要遍历第二个列表。运行时间是 O(N+M) 而不是 O(N),其中 N 是第一个列表的长度,而 M 是第二个列表的长度。
    • @MikeHartl 当然。这就是连接列表的常用方法不涉及长度计算的原因。然而,这是问题中所要求的。如果你需要连接和长度计算,它仍然比单独做更有效。
    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多