0

我试图通过使用带有 SWI-Prolog ( SWI-Prolog Pack )的Aleph归纳逻辑编程系统来获得理论

我的代码是

:- use_module(library(aleph)).
:- if(current_predicate(use_rendering/1)).
:- use_rendering(prolog).
:- endif.
:- aleph.
:- modeh(*,publication_nbpages(-publication,+pubnbpages)).
:- modeb(*,book_chapters_nbPages(-book,+nbpages)).


:-determination(publication_nbpages/2,book_chapters_nbPages/2).


:-begin_bg.
:- dynamic publication_title/2.
:- dynamic book2publication/2.
:- dynamic book_title/2.
publication_title(P,A) :- book2publication(B,P), book_title(B,A).
:-end_bg.

:-begin_in_pos.
book2publication(book0,publication0).
book(book0).
booktitle(article).
book_title(book0,article).
chapters(chapter0).
chapters(chapter1).
book_chapters(book0,[chapter0,chapter1]).
nbpages(13).
nbpages(1).
book_chapters_nbPages(book0,[13,1]).
publication(publication0).
publicationtitle(article).
publication_title(publication0,article).
pubnbpages(14).
publication_nbpages(publication0,14).
:-end_in_pos.

:-begin_in_neg.
publication_nbpages(book0,1).
publication_nbpages(book0,13).
publication_nbpages(book0,article).
publication_nbpages(book0,publication0).
:-end_in_neg.

:-aleph_read_all.

我想要的是:

publication_nbpages(P,N) :- book2publication(B,P), book_chapters_nbPages(B,N).

但是,我得到的结果是:

[Rule 1] [Pos cover = 1 Neg cover = 0]
book2publication(book0,publication0).

[Rule 2] [Pos cover = 1 Neg cover = 0]
book(book0).

[Rule 3] [Pos cover = 1 Neg cover = 0]
booktitle(article).

[Rule 4] [Pos cover = 1 Neg cover = 0]
book_title(book0,article).

[Rule 5] [Pos cover = 1 Neg cover = 0]
chapters(chapter0).

[Rule 6] [Pos cover = 1 Neg cover = 0]
chapters(chapter1).

[Rule 7] [Pos cover = 1 Neg cover = 0]
book_chapters(book0,[chapter0,chapter1]).

[Rule 8] [Pos cover = 1 Neg cover = 0]
nbpages(13).

[Rule 9] [Pos cover = 1 Neg cover = 0]
nbpages(1).

[Rule 10] [Pos cover = 1 Neg cover = 0]
book_chapters_nbPages(book0,[13,1]).

[Rule 11] [Pos cover = 1 Neg cover = 0]
publication(publication0).

[Rule 12] [Pos cover = 1 Neg cover = 0]
publicationtitle(article).

[Rule 13] [Pos cover = 1 Neg cover = 0]
publication_title(publication0,article).

[Rule 14] [Pos cover = 1 Neg cover = 0]
pubnbpages(14).

[Rule 15] [Pos cover = 1 Neg cover = 0]
publication_nbpages(publication0,14).

太奇怪了,我想要一个通用的理论,但是 SWI-Prolog 只是给了我所有的规则。

4

1 回答 1

1

似乎缺少的一件事是book2publication(B,P). 也许添加这会有所帮助。您还可以在模式声明中尝试不同的 +/-/#。

干杯/JCR

于 2020-09-18T15:15:49.947 回答