수색…


호출 / N 술어

프리디 케이트의 call/N 계열은 런타임에 임의의 Prolog 목표를 호출 할 수 있습니다.

?- G=true, call(G).
true.

?- G=(true,false), call(G).
false.

매 플리스트 / [2,3]

maplist/2maplist/3 은 하나의 요소에 관한 술어의 정의가 그러한 요소들의 리스트maplist/3 수 있도록 해주는 상위 순서 술어입니다. 이 술어는 call/2call/3 을 빌딩 블록으로 사용하여 정의 할 수 있으며 많은 Prolog 시스템과 함께 제공됩니다.

예 :

?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).

메타 콜

Prolog에서 소위 메타 콜 은 기본 제공 언어 기능입니다. 모든 Prolog 코드는 Prolog 용어 로 표현되어 목표를 동적으로 구성하고 추가 술어없이 다른 목표처럼 사용할 수 있습니다.

?- Goal = dif(X, Y), Goal.
dif(X, Y).

이 메커니즘을 사용하면 Prolog 자체에서 다른 상위 순서 술어를 정의 할 수 있습니다.

foldl / 4

접은 부분 (왼쪽부터)은 다음 중 더 높은 순서의 관계입니다.

  • 3 개의 인자를 가진 술어
  • 요소 목록
  • 초기 상태
  • 최종 상태. 중간 상태를 수행하면서 연속 요소에 술어를 적용한 결과입니다.

예 : 목록에서 모든 요소의 합계 를 표현하려면 foldl/4 를 사용하고 요소의 합을 정의하는 기준 블록을 사용합니다.

?- foldl(plus, [2,3,4], 0, S).
S = 9.

목표 목록 불러 오기

목표의 목록 인 것처럼 목표 목록을 호출하려면 고위 술어 call / 1과 maplist / 2를 결합하십시오.

?- Gs = [X = a, Y = b], maplist(call, Gs).
Gs = [a=a, b=b],
X = a,
Y = b.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow