验证元素是否存在于 ProLog 中的矩阵中
Verify if an element is present in a matrix in ProLog
大家晚安,
我正忙着为我的逻辑编程类交付一个小项目,其中的主题是基于矩阵的操作。
好吧,其中一个被要求的操作是验证给定矩阵中是否存在某个元素,我遇到了一些问题,因为我通常对命令式编程有自己的想法。
目前,我达到了这个:
isElemPresent(_, []) :- !.
isElemPresent(Elem, [M|Mt]) :- isElemPresent(Elem,Mt) ; isElemPresentRow(Elem,M).
isElemPresentRow(Elem, [Elem|_]).
isElemPresentRow(Elem, [_|T]) :- isElemPresentRow(Elem, T).
如果有人能指导我实现目标,并尽可能告诉我代码中缺少什么,我将不胜感激。
% The element belongs to the list if it matches
% the head of the list
isElemPresent(X,[X|_]).
% The element belongs to the list if it is
% in the head (another array) of the list.
isElemPresent(X,[A|_]):- isElemPresent(X,A).
% The element belongs to the list if it is
% in the queue of the list.
isElemPresent(X,[_|R]):- isElemPresent(X,R).
例如:
?- isElemPresent(4,[[1,2,5],[6,3,4]]).
Yes
is_elem_present(Elem, Matrix) :-
member(Row, Matrix),
member(Elem, Row).
?- is_elem_present(Elem, [[1,2,5],[6,3,4]]).
Elem = 1 ;
Elem = 2 ;
Elem = 5 ;
Elem = 6 ;
Elem = 3 ;
Elem = 4.
?- is_elem_present(2, [[1,2,5],[6,3,4]]).
true ;
false.
下面是如何使用索引:
is_elem_present(I, J, Elem, Matrix) :-
nth0(I, Matrix, Row),
nth0(J, Row, Elem).
?- forall(is_elem_present(I,J,Elem,[[1,2,5],[6,3,4]]), writeln([I,J]=Elem)).
[0,0]=1
[0,1]=2
[0,2]=5
[1,0]=6
[1,1]=3
[1,2]=4
true.
大家晚安,
我正忙着为我的逻辑编程类交付一个小项目,其中的主题是基于矩阵的操作。
好吧,其中一个被要求的操作是验证给定矩阵中是否存在某个元素,我遇到了一些问题,因为我通常对命令式编程有自己的想法。
目前,我达到了这个:
isElemPresent(_, []) :- !.
isElemPresent(Elem, [M|Mt]) :- isElemPresent(Elem,Mt) ; isElemPresentRow(Elem,M).
isElemPresentRow(Elem, [Elem|_]).
isElemPresentRow(Elem, [_|T]) :- isElemPresentRow(Elem, T).
如果有人能指导我实现目标,并尽可能告诉我代码中缺少什么,我将不胜感激。
% The element belongs to the list if it matches
% the head of the list
isElemPresent(X,[X|_]).
% The element belongs to the list if it is
% in the head (another array) of the list.
isElemPresent(X,[A|_]):- isElemPresent(X,A).
% The element belongs to the list if it is
% in the queue of the list.
isElemPresent(X,[_|R]):- isElemPresent(X,R).
例如:
?- isElemPresent(4,[[1,2,5],[6,3,4]]).
Yes
is_elem_present(Elem, Matrix) :-
member(Row, Matrix),
member(Elem, Row).
?- is_elem_present(Elem, [[1,2,5],[6,3,4]]).
Elem = 1 ;
Elem = 2 ;
Elem = 5 ;
Elem = 6 ;
Elem = 3 ;
Elem = 4.
?- is_elem_present(2, [[1,2,5],[6,3,4]]).
true ;
false.
下面是如何使用索引:
is_elem_present(I, J, Elem, Matrix) :-
nth0(I, Matrix, Row),
nth0(J, Row, Elem).
?- forall(is_elem_present(I,J,Elem,[[1,2,5],[6,3,4]]), writeln([I,J]=Elem)).
[0,0]=1
[0,1]=2
[0,2]=5
[1,0]=6
[1,1]=3
[1,2]=4
true.