프롤로그의 마스킹

Bgibers

나는 최근에 Prolog를 알아 내려고 노력했고 Prolog의 목록 목록을 엉망으로 만들고 있습니다. 나는 p Prolog에서 생각하는 일종의 마스크를 만들려고합니다. 프롤로그에서 두 목록 목록 (L1과 L2)의 차이를 결정하고 목록 목록 (R이라고 가정)으로 저장하는 술어가 있습니다. 차이가 0 (noDifference)인지 간단히 나타내는 또 다른 술어가 있습니다. R과 비교하여 L1 및 L2를 기반으로하는 두 개의 결과 목록 (M1 및 M2)을 갖고 싶습니다. 예를 들어 음수 값이 위치에있는 경우 L1 및 L2의 모든 값을 R과 비교하고 싶습니다. R의 동일한 위치에있는 값이 M1에 저장됩니다. 그리고 양의 값이 R의 위치에 있으면 L2의 동일한 위치에있는 값이 의미가 있다면 M2에 저장됩니다.

이것이 내가 지금까지 가지고있는 것입니다 (내가 제대로 시작했는지 잘 모르겠습니다)

masker(L1,L2,R,M1,M2):- noDifference(R1), M1=R, M2=R1;

나머지는 여기에 몇 가지 예제 값이 내부적으로 표시되어야합니다.

L1=[[1,5,3,8],[1,5,3,8]]
L2=[[5,4,7,4],[5,4,7,4]]
R=[[4,-1,4,-4],[4,-1,4,-4]]
M1=[[0,5,0,8],[0,5,0,8]]Neg values of L1 at R are stored rest are 0)
M2=[[5,0,7,0],[5,0,7,0]](Pos values of L2 at R are stored rest are 0)

지금까지 내가하고있는 일이 옳고 하위 목표 / 다음에 가야 할 곳을 올바르게 공식화하는 방법에 대한 통찰력이 있으면 멋질 것입니다!

ex 술어로 편집

?- masker([[1,5,3,8],[1,5,3,8]],
          [[5,4,7,4],[5,4,7,4]],
          [[4,-1,4,-4],[4,-1,4,-4]], M1, M2).
M1=[[0,5,0,8],[0,5,0,8]].
M2=[[5,0,7,0],[5,0,7,0]].
tas

술어가 무엇을 설명해야하는지 생각하십시오. 제공 한 예에 따라 길이가 같은 5 개의 목록 목록 간의 관계입니다. 이것은 5 개의 빈 목록이있는 기본 케이스를 제안합니다. 그렇지 않으면 5 개 목록 모두의 헤드는 목록 자체이며 서로 특정 관계에 있습니다.이 목록을 lists_mask_mlists / 5라고하겠습니다. 물론 재귀 적 목표로 실현할 수있는 꼬리도 마찬가지입니다. 따라서 술어 masker / 5는 다음과 같이 보일 수 있습니다.

masker([],[],[],[],[]).
masker([X|Xs],[Y|Ys],[M|Ms],[R1|R1s],[R2|R2s]) :-
   lists_mask_mlists(X,Y,M,R1,R2),
   masker(Xs,Ys,Ms,R1s,R2s).

실제 마스킹 관계에는 5 개의 빈 목록이있는 기본 케이스도 있습니다. 그렇지 않으면 두 가지 추가 사례가 있습니다.

1) 현재 마스킹 요소 (세 번째 목록의 헤드)가 음수입니다. 첫 번째 목록의 헤드는 네 번째 목록의 헤드이고 다섯 번째 목록의 헤드는 0

2) 현재 마스킹 요소가 양수 : 두 번째 목록의 헤드는 다섯 번째 목록의 헤드이고 네 번째 목록의 헤드는 0

다음과 같이 표현할 수 있습니다.

lists_mask_mlists([],[],[],[],[]).
lists_mask_mlists([X|Xs],[_Y|Ys],[M|Ms],[X|R1s],[0|R2s]) :-   % 1)
   M < 0,
   lists_mask_mlists(Xs,Ys,Ms,R1s,R2s).
lists_mask_mlists([_X|Xs],[Y|Ys],[M|Ms],[0|R1s],[Y|R2s]) :-   % 2)
   M >= 0,
   lists_mask_mlists(Xs,Ys,Ms,R1s,R2s).

이 술어를 사용하면 예제 쿼리가 원하는 결과를 생성합니다.

   ?- masker([[1,5,3,8],[1,5,3,8]],[[5,4,7,4],[5,4,7,4]],[[4,-1,4,-4],[4,-1,4,-4]],M1,M2).
M1 = [[0,5,0,8],[0,5,0,8]],
M2 = [[5,0,7,0],[5,0,7,0]] ? ;
no

참고 그러나, 해당 <하고 >=이 경우에만 작동 경우 세 번째 목록은 무료 변수입니다. 4세 번째 인수 의 첫 번째 인수를 변수로 바꾸면 인스턴스화 오류가 발생합니다.

   ?- masker([[1,5,3,8],[1,5,3,8]],[[5,4,7,4],[5,4,7,4]],[[X,-1,4,-4],[4,-1,4,-4]],M1,M2).
     ERROR at  clause 2 of user:masked/5 !!
     INSTANTIATION ERROR- =:=/2: expected bound value

변수가없는 세 번째 인수와 함께 술어를 사용하려는 경우 clpfd 사용을 고려할 수 있습니다. 라인 포함

:-use_module(library(clpfd)).

소스 파일에서 다음과 같이 list_mask_mlists / 5를 변경하십시오.

lists_mask_mlists([],[],[],[],[]).
lists_mask_mlists([X|Xs],[_Y|Ys],[M|Ms],[X|R1s],[0|R2s]) :-
   M #< 0,                                                    % <- here
   lists_mask_mlists(Xs,Ys,Ms,R1s,R2s).
lists_mask_mlists([_X|Xs],[Y|Ys],[M|Ms],[0|R1s],[Y|R2s]) :-
   M #>= 0,                                                   % <- here
   lists_mask_mlists(Xs,Ys,Ms,R1s,R2s).

이제 두 번째 쿼리도 작동합니다.

   ?- masker([[1,5,3,8],[1,5,3,8]],[[5,4,7,4],[5,4,7,4]],[[X,-1,4,-4],[4,-1,4,-4]],M1,M2).
M1 = [[1,5,0,8],[0,5,0,8]],
M2 = [[0,0,7,0],[5,0,7,0]],
X in inf.. -1 ? ;
M1 = [[0,5,0,8],[0,5,0,8]],
M2 = [[5,0,7,0],[5,0,7,0]],
X in 0..sup ? ;
no

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AngularJS의 마스킹

분류에서Dev

Broadleaf Commerce의 마스킹

분류에서Dev

CSS로 div 마스킹

분류에서Dev

Kafka Connect 로그에서 마스킹?

분류에서Dev

프롤로그의 마스터 마인드-역 추적

분류에서Dev

C의 비트 연산 및 마스킹

분류에서Dev

자바의 바이트 마스킹

분류에서Dev

IE10의 CSS 마스킹

분류에서Dev

IE10의 CSS 마스킹

분류에서Dev

numpy 배열의 마스킹 값

분류에서Dev

GWT로 브라우저 URL 마스킹

분류에서Dev

컷 아웃 원으로 UIView 마스킹

분류에서Dev

SKSpriteNode를 액체로 마스킹

분류에서Dev

SVG / CSS : 마스킹 된 헤더 로고

분류에서Dev

프롤로그의 프로그램 목록에 액세스

분류에서Dev

마스킹 된 UIView의 그림자 유지

분류에서Dev

intelitrace 로그 파일에서 데이터 마스킹

분류에서Dev

CALayer 그림자를 직사각형 외부로만 마스킹

분류에서Dev

하위 레이어 그라디언트를 CAShapeLayer로 마스킹

분류에서Dev

마스킹 된 데이터 프레임 내부의 NaN 교체

분류에서Dev

마스킹 된 배열의 마스킹 된 요소의 인덱스를 검색하는 최적화 된 호출?

분류에서Dev

로그의 민감한 데이터를 마스킹하는 Java 정규식

분류에서Dev

열의 하위 문자열로 데이터 프레임 마스킹

분류에서Dev

행렬의 인덱스 마스킹-MATLAB-MathWorks 한국

분류에서Dev

마스킹 된 텍스트 상자의 값이 반올림 됨

분류에서Dev

jQuery를 사용하여 텍스트 상자의 값 마스킹

분류에서Dev

체크 박스 해킹으로 마우스 오버

분류에서Dev

비트 시프트 대 비트 시프트 + 및 마스킹

분류에서Dev

프롤로그 시퀀스