В настоящее время я работаю над своим домашним заданием Symboli c AI в Aleph , и я работал над ним часами, но я все еще там, где был в начале, я надеюсь, что некоторые из вас могут помогите мне или дайте мне подсказки.
Итак, первым упражнением было посмотреть на рекурсивный пример в Aleph реализации member / 2 и проверить, как это работает, и я думаю, я понимаю, что:
mem.b:
% Simple illustration of the learning of recursive predicates
% in Aleph
% To run do the following:
% a. Load Aleph
% b. read_all(mem).
% c. induce.
% :- modeh(*,mem(+any,+list)).
% :- modeb(*,mem(+any,+list)).
% :- modeb(1,((+list) = ([-any|-list]))).
:- mode(*,mem(+any,+list)).
:- mode(1,((+list) = ([-any|-list]))).
:- set(i,3).
:- set(noise,0).
:- determination(mem/2,mem/2).
:- determination(mem/2,'='/2).
Следующее упражнение - реализовать алгоритм Aleph для другой рекурсивной проблемы, например rev / 2 или append / 3, я пробовал это часами, но не стал Я действительно знаю, с чего начать и что делать. Вот как я это реализовал на данный момент:
rev.b (я много пробовал и все прокомментировал, но, честно говоря, я действительно сбит с толку):
% Simple illustration of the learning of recursive predicates
% in Aleph
% To run do the following:
% a. Load Aleph
% b. read_all(rev).
% c. induce.
% :- mode(*, rev(+startlist,+startreversed,+result)).
% :- mode(1, ((+startlist) = ([-any|-startlistlist]))).
% :- mode(1, ((-result) = ([+any|+result]))).
% :- mode(1, ((-list) = (+result))).
% :- mode(*,rev(+startlist,+endlist)).
% :- mode(1, (length(+startlist, -length) = length(+endlist, -length))).
% :- mode(*,rev(+startlist,-result)).
% :- modeb(*,mem(+any, ([+any|+list]))).
% :- modeb(1, ((-result) = ([+any|+result]))).
% :- modeb(1, ((+list) = (-endlist))).
% :- modeb(1, ((+list) = (-startlist))).
% :- modeb(1, ((+endlist) = ([-any|-endlist]))).
% :- modeb(1, ((+startlist) = ([-any|-startlist]))).
% :- modeb(1, ((-result) = ([+any]))).
%:- mode(*, rev(+startlist, +list)).
%:- modeb(*, ((+startlist) = (+list), (+startlist) = ([-any|-startlist]))).
%:- modeb(*, ((-startlist) = ([+anyend|+anystart]))).
% :- modeb(1, ((+startlist) = ([-any|-startlist]))).
%:- modeb(*, ((+startlist) = ([-anystart|-anyend]))).
%:- modeb(1, ((+startlist) = ([-any|-startlist]))).
%:- modeb(1, ((+list) = ([-any|-list]))).
:- mode(*, rev(+list, +list)).
:- mode(1, ((+list) = ([-anystart|-anyend]))).
:- mode(1, ((-list) = ([+anystart]))).
:- mode(1, ((-list) = ([+anyend]))).
:- mode(1, ((-list) = ([+anyend|+anystart]))).
% :- mode(1, (([+endlist]) = ([+list|+any]))).%, (+starlist) = ([-any|-startlist]))).
% :- mode(1, ((+startlist) = ([-any|-list]))).%, (+endlist) = ([-anyt|-listt]))).
:- set(i,2).
:- set(noise,0).
:- determination(rev/2, rev/2).
% :- determination(rev/3, rev/3).
% :- determination(rev/2, mem/2).
% :- determination(rev/2,rev/2).
% :- determination(rev/2,length/2).
:- determination(rev/2,'='/2).
% :- determination(rev/3, '='/2).
Если кто-то хочет увидеть мои положительные и отрицательные файлы примеров, дайте мне знать, но я думаю, что основная проблема заключается в файле фоновых знаний, я не очень понимаю его, tbh. Есть у кого-нибудь подсказки / подсказки / помощь?