序言。如何打印编码的矩阵?

时间:2015-04-26 16:38:37

标签: prolog

我有下一个矩阵:

map(1,[[1,0,0,0,0,0,0,0,0,0],
       [1,1,0,0,1,1,0,0,0,0],
       [0,1,0,0,1,0,0,0,0,0],
       [0,0,0,0,0,0,0,0,0,0],
       [0,0,1,0,0,0,1,0,0,0],
       [0,1,1,0,0,0,0,0,0,0],
       [0,0,0,0,0,0,0,1,1,0],
       [0,0,0,0,0,0,0,0,0,0],
       [0,0,0,0,0,0,0,0,0,0],
       [0,0,0,0,0,0,0,0,0,0]]).

我想打印这样的矩阵:
    - 如果矩阵元素值为0 - >打印('〜')
    - 如果矩阵元素值是1 - >打印( '#')。

我尝试这样做,但我的方法每次打印都是假的。这是我的代码:

print_encoded([H|T]) :-
   H==0 ->
   write('~');
   H==1 ->
   write('#');
   print_encoded(T).

showEncoded :-
    map(_,Map),
    print_encoded(Map).

也许这是一个简单的问题,但prolog是一种新的编程语言。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

print_encoded的[]没有基本情况。 它可能是

print_encoded([])  :-
   nl.

你可以使用"功能精神"使用SWI-Prolog的模块lambda

:- use_module(library(lambda)).

print_encoded(M) :-
    maplist(\X^(maplist(\Y^(Y = 0
                            -> write('~')
                            ;  write('#')),
                       X),
               nl),
           M).

答案 1 :(得分:0)

maplist似乎是建立在这些任务的目的......

encode_map(M) :- maplist(maplist(encode_cell), M).
encode_cell(0) :- write('~').
encode_cell(1) :- write('#').