Prolog에 따라 다르지만 실제로 구현하면 C 또는 다른 명령형 언어로 더러운 작업이 수행됩니다. is/2
의 일부는 순수한 프롤로그에서 시뮬레이션 할 수 있습니다 :
evaluate
산술 식에 대해 알고 큰 조건이다
is(X, Expr) :-
evaluate(Expr, Value),
(var(X) ->
X = Value
;
X =:= Value
).
. 순수 Prolog에서도 큰 부분을 구현하는 방법이 있지만 느리고 아프다. 예 : 당신이 정수를 추가하는 조건이있는 경우, 당신은 그들뿐만 아니라 다음 (바보) 알고리즘을 사용하여 증식 할 수
evaluate(X + Y, Value) :-
% even this can be done in Prolog using an increment predicate,
% but it would take O(n) time to do n/2 + n/2.
add(X, Y, Value).
evaluate(X * Y, Value) :-
(X == 0 ->
Value = 0
;
evaluate(X + -1, X1),
evaluate(X1, Y, Value1),
evaluate(Y + Value1, Value)
).
이 중에이 보장되지 중 실제 또는 올바른; 나는 단지 산수 이이 Prolog에서 구현 될 수있는 방법을 보여줄뿐입니다.
감사합니다. 그리고 Prolog에서 증분 술어를 어떻게 구현할 수 있는가? (is/2 구현을 위해). 나는 그것을 보았지만 'is/2'를 사용하여 증가분의 구현만을 발견했다. Prolog가 순수 할 수 있는지 궁금해서 ("모든 것이 술어"와 같이)이 모든 것을 묻습니다. – octavian
@octavian'is/2'는 술어입니다. 'is '가 두 가지 방법으로 작동해야한다는 것을 의미한다면, 일반적인 경우에 이것은 정확히 유용하지 않다는 것을 깨닫는다. (2는 1 + 1, 2는 0 + 2, 2는 4/2, 2는 sqrt이다. ...). 그러나 제약 논리 프로그래밍은 아마도 당신이 의미하는 바에 가까워집니다. –
답을 좀 더주의 깊게 읽으면 정확하지 않습니다. 아마도'is/2'에 대한 예제에서 if/else는 필요하지 않을 것입니다. 대신 _Expr_을 평가하고 _X_로 통합하려고합니다. 이런 이유로'is/2'와'= : ='(산술 평등)은 같은 인수로 다른 해답을 가질 수 있습니다. –