Кто-нибудь сталкивался с рекурсивными проблемами в Aleph? - PullRequest
3 голосов
/ 29 мая 2020

В настоящее время я работаю над своим домашним заданием 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. Есть у кого-нибудь подсказки / подсказки / помощь?

...