1

チェックするためにProlog述語を書く必要があります:

  1. 行のすべての行列要素が奇数の場合、プログラムは行の最後に追加する必要があり1ます。
  2. 行に1つ以上の偶数がある場合、プログラムは行の最後に追加する必要があり0ます。
?- f([[1,2,3],[5,5,5],[4,4,4]], Xss).
Xss = [[1,2,3,0],[5,5,5,1],[4,4,4,0]].  

これは私が今持っているものです:

f([],[]).
f(matrix,Xss).
f([Xs|T],Xss):-
    Xs=[X|T2],
(X mod 2 =:= 0 ->
add2end(0,[X|T2],[X|Result]):-
add2end(0,T2, Result),
add2end(0,[],[0]), Xss=[Xs|T] ;
   add2end(1,[X|T2],[X|Result]):-
add2end(1,T2,Result),
    add2end(1,[],[1])), Xss=[Xs|T]..
4

2 に答える 2

2

Prolog ラムダで問題ありません!

:- use_module(library(lambda)).
:- use_module(library(clpfd)).

、、、およびf/2に基づいて定義します。 maplist/3sum/3(#=)/2append/3

f(Xss,Yss) :-
   maplist(\Xs^Ys^(sum(Xs,#=,S),P #= S mod 2,append(Xs,[P],Ys)), Xss, Yss).

サンプルクエリ:

?- f([[1,2,3],[5,5,5],[4,4,4]], Xss)。
Xss = [[1,2,3, 0 ], [5,5,5, 1 ], [4,4,4, 0 ]]. % は決定論的に成功します   
于 2015-08-19T10:01:34.593 に答える