Написать функцию lookup - Prolog
Формулировка задачи:
Есть список R, например R = [x/5, y/7, x/4]. Нужно написать функцию lookup(X,R,V), где x - наш атом, R - окружение, описанное ранее, и V - результат, в котором должны быть числа, которые находятся после / заданного атома. Далее есть еще функция
test(V) :-
eval(2*3+4-6/2, V).
Функция eval вычисляет значение по правилам естественной семантики(Это аксиоматическая система, определяющая смысл каждой конструкции языка в виде вычисляемого ею значения.
)Надо совместить функции eval и lookup так, чтобы цифры из lookup передавались в eval.
Помогите пожалуйста.
Решение задачи: «Написать функцию lookup»
textual
Листинг программы
eval(N,_,N) :- number(N). eval(X,R,V) :- atom(X), member(X/V,R). eval(E,R,V) :- E =.. [Op,E1,E2], member(Op,[+,-,*,/]), eval(E1,R,V1), eval(E2,R,V2), Ee =.. [Op,V1,V2], V is Ee.
Объяснение кода листинга программы
Код выполняет оценку (eval) выражений в логическом программировании на основе заданного набора правил (R) и базы данных (lookup). Оценка выражения происходит в три этапа:
- Проверка, является ли N числом. Если это так, то оценка выражения N просто возвращает N.
- Проверка, является ли X атомом. Если это так, то оценка выражения X, R, V происходит путем поиска X/V в R.
- Если X не является атомом, то это означает, что X является конструкцией с оператором (E =.. [Op,E1,E2]). Проверка, является ли Op одним из трех операторов +,-,*. Если это так, то оценка выражения E, R, V сначала оценивает E1 и E2, а затем применяет соответствующий оператор к их результатам, чтобы получить V. Вот пример использования функции lookup: lookup('a', 3). Этот запрос вернет 3, потому что 'a' соответствует 3 в базе данных. lookup('b', 3). Этот запрос ничего не вернет, потому что 'b' не соответствует никакому значению в базе данных. lookup('a', 5). Этот запрос также вернет 3, потому что значение 'a' в базе данных не изменилось. lookup('c', 3). Этот запрос вернет ошибку, потому что 'c' не является допустимым термином в базе данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д