Prolog如何比较(>,<)两个字符串?

时间:2017-03-12 13:02:05

标签: prolog

我在prolog中有几个事实,我想按字母顺序显示它们(作者)。我用book(name_of_book,作者)。

book('some title', 'CSome author').
book('some title 2', 'ASome author').

结果需要: ' ASome作者', ' CSome作者'

如果您不使用任何内置功能,我将不胜感激。如果您不使用任何内置功能,那将会非常棒。

1 个答案:

答案 0 :(得分:0)

我知道采取事实和显示排序的唯一方法是制作列表然后排序。 SWI-Prolog和显然ECLiPSe有4个参数排序,所以你可以这样做:

books_sort_by_author(Books) :-
    bagof(book(Title, Author), book(Title, Author), Books_0),
    sort(2, @=<, Books_0, Books).

似乎您可以改为setof并在第一个参数中切换作者和书籍:

books_2(Books) :-
    setof(book(Author, Title), book(Title, Author), Books).

我试图在没有bagofsetof以及findall的情况下这样做,我不知道它是如何可能的;也许其他人可以更好地回答?

编辑:当然可以不创建任何列表:您可以使用assertaassertzretract进行选择排序和重新排序数据库事实;但这是一个很大的黑客,肯定不是一个聪明的解决方案。它也使用内置函数。