프롤로그에서 "/"가 무엇을 의미하는지 모를 때가 있습니다.

StackOverflow https://stackoverflow.com//questions/9664090

  •  12-12-2019
  •  | 
  •  

문제

코드에서 슬래시가 다음과 같이 사용되는 것을 볼 수 있습니다.

solution([X/Y|Others]) :-
   noattack(X/Y, Others).

그런데 가끔 "/1" "/2" 등이 보입니다.프롤로그에서

이 진술(문자)은 무엇을 의미합니까?

도움이 되었습니까?

해결책

두 가지 예 모두에서 infix 연산자 로 사용되지만 다른 것으로, 무관 한 의미로 사용됩니다.

첫 번째 규칙에서는 MOG가 이미 지적했듯이 세퍼레이터 일뿐입니다. 다른 용도로 주로 문서의 목적을 위해 술어 표시기가됩니다. 우리가 동일한 펑터와 다른 술어를 가질 수 있기 때문에 유용합니다.

표현식은 펑터가 운영자 인 바이너리 또는 단수 관계를 위해 구문 설탕 입니다. 이러한 표현의 의미 은 문맥에 의해 정의됩니다 : 예를 들어, IS / 2는 표현식의 산술 평가를 처리합니다. 여기서 운전자는 예상 산술 연산을 수행합니다

?- X is 10 / 3.
X = 3.3333333333333335.
.

builtin current_op 연산자의 정의를 검사 할 수 있습니다. 시도해보십시오

   ?- current_op(Precedence,Associativity,/).
   Precedence = 400,
   Associativity = yfx .
.

우리는 /를 알고 있으면 /. 바보 같은 예 :

/(A, B) :- format(A, B).
.

또는 더 좋음

A / B :- format(A, B).
.

는 우리가 많은 형식을 가진 속기로 사용할 수 있습니다. 이 사용법은 낙담하여 프로그램을 읽기가 어려워 지지만 그러한 정의가 주어지면 유효한 규칙입니다.

?- 'hello ~s' / [world].
hello world
.

다른 팁

X/Y/(X, Y) 용어, 즉 펑터가 "/"인 용어가 "/"인 용어 인 X 및 Y의 경우 infix 구문입니다.이 경우에는 infix 구문을 사용할 수 있습니다 /ISO Prolog의 기본 운영자.a+b와 마찬가지로 +(a, b) 용어의 infix 구문이고 X is Y + Zis(X, +(Y, Z))의 infix 구문입니다.

음, 코드에서는 구분 기호로 사용될 수도 있습니다.통합을 통해 패턴 일치 목적으로 사용됩니다.

A-B = 1-2.

돌아올 것이다

A = 1,
B = 2.

구분 기호를 사용했기 때문에 - 콘텐츠를 일치시키는 데 도움이 됩니다.여기서 구분 기호는 다음과 같습니다. /.

당신이 볼 다른 장소 /1 그리고 /2 술어를 설명할 때 많은 일이 일어납니다.

somepredicate/arity 술어를 나타냅니다. somepredicate 걸립니다 arity 인수.예:

% member/2 : member(?Element, ?List)
member(Element, [Element|_Tail]).
member(Element, [_Head|Tail]) :-
    member(Element, Tail).

여기서 첫 번째 줄은 멤버가 2개의 인수를 취한다고 나와 있습니다.이 형식은 예를 들어 swi-prolog에서 다음과 같은 술어에서 대상으로 삼는 술어를 지정하는 데 사용할 수도 있습니다. listing/1:거기에서 인수로 전달할 수 있습니다 maplist/2 또는 maplist/3 결과는 달라질 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top