Задачи По Прологу

Тема в разделе "Другие", создана пользователем iiukyr4uk, 31 май 2013.

  1. iiukyr4uk

    iiukyr4uk New Member

    Регистрация:
    31 май 2013
    Сообщения:
    1
    Симпатии:
    0
    Ребят, помогите кто нить плиз, не знаю как сделать лабу(((


    1.Определите (рекурсивно, не используя ^) предикат power(X, N, Power), который выполняется, если Power -- число X в степени N.

    ?- power(3, 2, X).
    X = 9

    2. Представим многочлены как списки их коэффициентов в порядке убывания степени. Например, многочлен 2*x^2+1 будет представлен как [2,0,1]. Определите предикат eval_poly(Polynom, X, Result), выполняющийся, если Result -- значение многочлена Polynom при аргументе X. Для возведения в степень используйте оператор ^ или определённый в прошлой задаче power/3. Возможно также использование схемы Горнера.

    ?- eval_poly([2,0,1,0], 2, Result).
    Result = 9

    3. В числе операторов, определённых в Prolog, есть /\ (и), \/ (или), \+ (не) и -> (следует). Определите предикат nnf(Formula), который выполняется, если Formula -- формула, в которой отрицания стоят только перед переменными (переменные в формуле представляем атомами).

    ?- nnf((x /\ \+ y) -> \+ x /\ z).
    Yes
    ?- nnf((x /\ \+ y) -> \+ (x /\ z)).
    No

    4. Определите предикат nnf(Formula, NNF), который выполняется, если NNF -- формула, полученная из Formula эквивалентными преобразованиями, в которой отрицания стоят только перед переменными.

    ?- nnf(\+ ((x -> y) /\ z), NNF).
    NNF = (x /\ \+ y) \/ \+ z
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    помогу за вознаграждение. Дорого.
    ICQ 395-546-218
     
Загрузка...

Поделиться этой страницей