显示列表序言列表

时间:2017-12-12 13:52:20

标签: prolog

我无法在prolog中显示列表列表,请帮助我举个例子: 我有这个清单: [[1,2,3] [4,5] [6,8,7] [6,9] 我想删除这个[[] [] [] []]并显示内容: 1 2 3 4 5 6 8 7 6 9

我试过这个

WriteListe([]).
write_liste([X|Xs]) :-
 format('-~w~n', [X]),
 write_liste(Xs).

但是当我调用WriteListe(L)时,我有这个结果 L = [] -_6782 L = [_6782] .....

? 谢谢你

1 个答案:

答案 0 :(得分:2)

每个非空列表[A|B]都包含其头元素A及其余元素,列表B。否则它是一个空列表[]

write_liste(X):-                        /* e.g. write_liste([[1,2,3],[4,5]). */
   X = [A|B] -> write_liste( ... ),     /* recurse on "car"                  */
                write_liste( ... ) ;    /* recurse on "cdr"                  */
   X = []    -> true /* skip it */ ; 
   /* else */   format('~w ', X).       /* we've reached the list's fringe   */

尝试填补空白。

在lisp中,这被非正式地称为car / cdr递归。我们正在处理" car"即头部元素,以及cdr,即其余元素。如果它不能被拆开,那么它就是一个原子元素。由于这样的cons个节点(Prolog中的[A|B])的每个链都以一个标记值结束,一个空列表[]也不能拆开,我们跳过那个,因为我们只对实际元素感兴趣,而不是代表的任何人为影响。

换句话说,[] 为空,因此其中没有任何内容可供打印。