首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog列表,使用更多的前辈搜索语言

Prolog列表,使用更多的前辈搜索语言
EN

Stack Overflow用户
提问于 2017-10-05 23:58:29
回答 1查看 40关注 0票数 1

我有一个文件“linguagens.pl”,其代码如下所示:

代码语言:javascript
复制
linguagem('Flow-matic',1957).
linguagem('Fortran I',1957).
linguagem('Fortran II',1958).
linguagem('Algol 58',1958).
linguagem('Lisp',1959).

predecessora('COBOL','Flow-matic').
predecessora('Fortran II','Fortran I').
predecessora('Algol 58','Fortran I').
predecessora('Algol 60','Algol 58').
predecessora('Fortran IV','Fortran II').

但更大。语言(名称,年份)和先驱者(语言L1,语言L2,先于L1)。

现在,我需要找到有更多前辈的L语言。

代码语言:javascript
复制
?- lingcommaispre(L).
L = 'Swift'.

到目前为止,我试过这个:

代码语言:javascript
复制
n_predecessoras(L, List) :- setof(P, predecessora(L, P), List).

lingcommaispre_aux([], _, L, L).
lingcommaispre_aux([H|T], N1, L1, L) :- n_predecessoras(H, Lista2),
                                        length(Lista2, N2),
                                        N1 >= N2,
                                        lingcommaispre_aux(T, N1, L1, L).
lingcommaispre_aux([H|T], N1, _ , L) :- n_predecessoras(H, Lista2),
                                        length(Lista2, N2),
                                        N1 < N2, 
                                        lingcommaispre_aux(T, N2, H , L).

lingcommaispre(L) :- findall(L1, linguagem(L1, _), Lista),
                     lingcommaispre_aux(Lista, -1, _, L).

但不起作用。我要做的是:找到语言L的所有前身,并将其放入列表中,因此我得到了这个列表的长度,并将其与前一个语言列表的长度进行了比较。

求你帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 06:02:23

您应该?- trace.执行,以找到它失败的地方。

但是--对于任何一种语言--都有很多值得投资的时间来学习如何准备使用工具。

实际上,SWI库(聚合)是这里的一个大助手:首先,我定义了

代码语言:javascript
复制
n_predecessoras(L,N) :- aggregate(count, P^predecessora(P,L), N).

然后

代码语言:javascript
复制
?- aggregate(max(N,L), n_predecessoras(L,N), Max).
Max = max(2, 'Fortran I').

不用再写程序了..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46596409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档