我无法在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] .....
? 谢谢你
答案 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]
)的每个链都以一个标记值结束,一个空列表[]
也不能拆开,我们跳过那个,因为我们只对实际元素感兴趣,而不是代表的任何人为影响。
换句话说,[]
为空,因此其中没有任何内容可供打印。