프롤로그에서 "/"가 무엇을 의미하는지 모를 때가 있습니다.
-
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 + Z
는 is(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
결과는 달라질 것입니다.