Prolog 序言如何比较(>;,<;)两个字符串?
我在prolog中有几个事实,我想按字母顺序(按作者)显示它们。我使用这本书(书的名字,作者) 结果必须是: “一个作家”, “一些作家”Prolog 序言如何比较(>;,<;)两个字符串?,prolog,Prolog,我在prolog中有几个事实,我想按字母顺序(按作者)显示它们。我使用这本书(书的名字,作者) 结果必须是: “一个作家”, “一些作家” 如果您不使用任何内置函数,我将非常感谢您的帮助。我所知道的获取事实并显示排序的唯一方法是制作列表,然后进行排序。SWI Prolog和ECLiPSe具有4参数排序,因此您可以执行以下操作: books_sort_by_author(Books) :- bagof(book(Title, Author), book(Title, Author), Bo
如果您不使用任何内置函数,我将非常感谢您的帮助。我所知道的获取事实并显示排序的唯一方法是制作列表,然后进行排序。SWI Prolog和ECLiPSe具有4参数排序,因此您可以执行以下操作:
books_sort_by_author(Books) :-
bagof(book(Title, Author), book(Title, Author), Books_0),
sort(2, @=<, Books_0, Books).
我试图在没有bagof
和setof
和findall
的情况下完成它,但我不知道这是怎么可能的;也许其他人能回答得更好
编辑:当然可以不创建任何列表:您可以使用
asserta
、assertz
和retract
对数据库事实进行排序和重新排序;但这是一个大难题,肯定不是聪明的解决方案。它也使用内置组件。'ASome'@
成功。那是内置的。没有办法避免使用内置程序。
books_sort_by_author(Books) :-
bagof(book(Title, Author), book(Title, Author), Books_0),
sort(2, @=<, Books_0, Books).
books_2(Books) :-
setof(book(Author, Title), book(Title, Author), Books).