Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.168.84] |
|
Сообщ.
#1
,
|
|
|
1. Что будет значением следующей логической программы для цели f(X,Y)
f(X,Y):-append(Xs,Ys,X),f(Xs,Ys,Y). f(X,[X1,X2,X3|[]],X). append([],Y,Y). append([X|Xs],Ys,[X|Zs]):-append(Xs,Ys,Zs). что она вообще делает? 2. Что будет решением конъюнктивной цели -p(X),g(X) для лог. проги r(a). g(a). p(X):-not(r(X)). not(Z):-Z,!,fail not(Z). что она делает? Пожалуйста подробнее. Заранее благодарен. |
Сообщ.
#2
,
|
|
|
1. Я так понял: Цель будет согласована, если Y есть начало Х, причем Х длиннее Y на 3 или более элемента.
Она сначала вызывает append для левых переменных, на каждом повторном вызове от Х отцепляется первый эл-т и пририсовывается к Xs, а хвост пишется в Ys. Предикат f(X,[X1,X2,X3|[]],X) согласовывается, если Ys длиннее 3 эл-тов, а Xs=Y, тому игреку, который задан вначале. Добавлено в : 2. Решением будет a, а работает все это вот как: -p(X):-not p(X) где not всего лишь унитарное отрицание из Паскаля это не тот not() который есть в задаче. То есть -Р(Х) будет согласован, если Р(Х) НЕ будет согласован. Дальше: P(X):-(-not(r(X))). Согласовываем not: not(Z)=not(r(X)):-(-r(X),!,fail). r(X):-X=a. (-r(a),!,fail) не согласуется, идем вниз, not(Z). Согласовали в Х есть а. -not(r(a)) есть ложь, возвращаем, так как других предикатов для р(Х) нет. -р(Х) есть истина, проверяем g(X), Х есть а, g(a) согласуется, результат: цель согласована Х=а. |