【问题标题】:Incomplete to difference lists差异列表不完整
【发布时间】:2013-02-13 18:51:59
【问题描述】:

我想将不完整的列表转换为差异列表,反之亦然。

这是将常规列表转换为差异的代码:

reg2diff(L,X-Y):-append(L,Y,X).

我该如何走另一个方向?

【问题讨论】:

  • 您在哪里找到该代码?在我看来是假的。
  • 假设您所说的“不完整列表”是一个 部分列表,如 [1,2,3|_],那么差异列表无法明确表示部分列表。请注意,差异列表不是直接术语,因此它不是数据结构,而是仅适用于某些情况的约定。
  • 您首先声明您将 incomplete 列表转换为 DL,然后您谈到将 regular 列表转换为 DL。它是哪一个?我假设不完整是指带有未实例化尾部的列表,例如[1,2, .... | X], var(X)

标签: prolog difference-lists


【解决方案1】:

差异列表不完整:

inc2diff(L,Z):- 
  (  nonvar(L) 
  -> ( L=[_|T] -> inc2diff(T,Z) ; L=[] -> Z=[] )
  ;  L=Z
  ).

把它当做

23 ?- L=[1,2,3|_],inc2diff(L,X).
L = [1, 2, 3|X].

24 ?- L=[1,2,3|Z],inc2diff(L,X).
L = [1, 2, 3|X],
Z = X.

25 ?- L=[1,2,3],inc2diff(L,X).
L = [1, 2, 3],
X = [].

【讨论】:

    【解决方案2】:
    | ?- listing(dl_list),dl_list([a,b,c,d|X]-X,L).
    
    % file: ...util.pg
    
    dl_list(A - [], A).
    
    L = [a,b,c,d]
    X = []
    
    yes
    

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2010-10-25
      相关资源
      最近更新 更多