2
에 나는를 arithmetics에 대한 프롤로그에서 조건을 평가 쓰고 싶다 나는 this을 발견 : 매우 DRY 큰 것이 아니라DRY 연산 식의 평가는 프롤로그
eval(A+B,CV):-eval(A,AV),eval(B,BV),CV is AV+BV.
eval(A-B,CV):-eval(A,AV),eval(B,BV),CV is AV-BV.
eval(A*B,CV):-eval(A,AV),eval(B,BV),CV is AV*BV.
eval(Num,Num):-number(Num).
합니다.
는 또한 this을 발견했습니다
:- op(100,fy,neg), op(200,yfx,and), op(300,yfx,or).
positive(Formula) :-
atom(Formula).
positive(Formula) :-
Formula =.. [_,Left,Right],
positive(Left),
positive(Right).
?- positive((p or q) and (q or r)).
Yes
?- positive(p and (neg q or r)).
No
운영자가 여기 _과 일치하고 인수가 왼쪽과 오른쪽으로 일치합니다.
그래서 나는이 함께했다 : 그것은 작동하지만 대신Syntax error: Operator expected
을 제공하는 경우에만
eval(Formula, Value) :-
Formula =.. [Op, L, R], Value is Op(L,R).
그것은 지옥으로 건조 될 것이다.
그런 경우에 Prolog가 인수에 연산자를 적용하는 방법이 있습니까?
감사합니다. 모든 작업을 수행하기 위해 (2)/2를 사용하는 것이 좋습니다. 변수를 처리하기 위해 약간 확장해야하지만 문제가되어서는 안됩니다. :) – Legat