append3

append([], Bs, Bs).
append([A|As], Bs, [A|Cs]) :-
    append(As, Bs, Cs).

append/3 是最着名的 Prolog 关系之一。它定义了三个参数之间的关系,如果第三个参数是一个表示第一个和第二个参数中指定的列表的串联的列表,则为 true。

值得注意的是,正如典型的 Prolog 代码一样,append/3 可用于多个方向 :它可用于:

  • 附加两个完全或部分实例化的列表:

      ?- A = [1, 2, 3], B=[4, 5, 6], append(A, B, Y)
      Output:
      A = [1, 2, 3],
      B = [4, 5, 6],
      Y = [1, 2, 3, 4, 5, 6].
    
  • 检查三个完全实例化列表的关系是否为真:

      ?- A = [1, 2, 3], B = [4, 5], C = [1, 2, 3, 4, 5, 6], append(A, B, C)
      Output:
      false
    
  • 生成所有可能的方法将两个列表附加到给定列表:

      ?- append(A, B, [1, 2, 3, 4]).
      Output:
      A = [],
      B = [1, 2, 3, 4] ;
      A = [1],
      B = [2, 3, 4] ;
      A = [1, 2],
      B = [3, 4] ;
      A = [1, 2, 3],
      B = [4] ;
      A = [1, 2, 3, 4],
      B = [] ;
      false.