2015-09-23 9 views
3

Я новичок в Prolog.Now Я хочу использовать Prolog для решения задач арифметического выражения. предположим, что у нас есть предикат вроде этого: expr(E,Val,Var,Sol) первое - это выражение, второе - значение, третье - это переменная, а четвертое - результат. например, если мы спросим: expr(3+x,2,x,S) ответ будет S=5 , и если мы спросим expr(5*6,3,x,S), ответ будет S=30, в этом случае x не появляется в выражении, поэтому мы просто игнорируем переменную и ее значение. Я хочу знать, как я могу осуществить это, вы, ребята, дайте мне несколько советовиспользовать пролог для решения арифметического выражения

+0

Я не совсем понимаю, что вы на самом деле хотите ... Решите уравнения? Или оценить арифметические выражения (с некоторой дополнительной заменой)? – repeat

ответ

1
number_itype(N) :- 
    functor(N,_,_), 
    number(N). 

expr(V,Val,V,Val). 
expr(N, _Val, _Var, N) :- 
    number_itype(N). 
expr(A+B, Val,Var, R) :- 
    expr(A, Val, Var, RA), 
    expr(B, Val, Var, RB), 
    R is RA+RB. 

Есть даже чистых способов выразить это. Может быть, кто-то еще хочет внести свой вклад.

+0

Не удалось выполнить запрос OP 'expr (5 * 6,3, x, S)' – gusbro

+0

@gusbro: Можете ли вы мне помочь? – false