2017-01-03 1 views
1

リストの要素を画面に印刷しようとしていますが、カスタム方法で印刷しています。 私は、コードをコンパイルすると、この表示されます。 printPROLOGでの書き込みで変数値が出力されない

は私のコード

:printTray句に

printTray([L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10]) :- 
    nl, 
    printLine(L0), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L1), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L2), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L3), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L4), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L5), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L6), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L7), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L8), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L9), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl, 
    printLine(L10), 
    print('---------+---+---+---+---+---+---+---+---+---'), nl. 

printLine([P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10]) :- 
    write(P0), 
    print('  '), 
    write(P1), 
    print(' | '), 
    write(P2), 
    print(' | '), 
    write(P3), 
    print(' | '), 
    write(P4), 
    print(' | '), 
    write(P5), 
    print(' | '), 
    write(P6), 
    print(' | '), 
    write(P7), 
    print(' | '), 
    write(P8), 
    print(' | '), 
    write(P9), 
    print(' | '), 
    write(P10), 
    print(' '), 
    nl. 

リストは、トレイのラインです。したがって、各行に対して、要素を1つずつ印刷します。 私はこれの理由を知らない、私は別の方法を試みたが、結果は同じです。 変数値のリスト要素の値を変更すると問題が発生します。

+1

'printTray'を呼び出すコードはどこですか?あなたは[guitracer](http://www.swi-prolog.org/pldoc/man?predicate=guitracer/0)やその他の手段を使って変数が縛られていない理由を特定しようとしましたか? –

+2

変数はすべてバインドされていません。これらの関係をどのように使っていますか? –

+0

繰り返し聞いたことがありますか?それはコピー貼り付けをたくさん保存します。 –

答えて

0

はたぶん、あなたは自分のコードのいくつかのリファクタリングは、このテストデータとペア

printTray(Tray) :- 
    nl, maplist(printLine, Tray). 

printLine([P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10]) :- 
    vwrite(P0), 
    write('  '), 
    maplist([P]>>(vwrite(P),write(' | ')), [P1,P2,P3,P4,P5,P6,P7,P8,P9]), 
    vwrite(P10), 
    writeln(' '), 
    writeln('---------+---+---+---+---+---+---+---+---+---'). 

vwrite(V) :- var(V) -> write(' ') ; write(V). 

につながる

vwrite(V) :- var(V) -> write(' ') ; write(V). 

のようなユーティリティを使用して、すべての書き込み/ 1を交換する必要が

tray([ 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [y,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,1,_,_], 
    [_,_,_,_,_,_,_,_,_,2,_], 
    [_,_,_,_,_,_,_,_,_,_,3], 
    [_,_,_,_,_,_,_,_,_,_,_], 
    [_,_,_,_,_,_,_,_,_,_,_]]). 

収量

?- tray(T), printTray(T). 

     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
y  | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | 1 | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | 2 | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 3 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
     | | | | | | | | | 
---------+---+---+---+---+---+---+---+---+--- 
関連する問題