如何使程序在线性时间运行?

时间:2014-10-01 23:41:14

标签: performance prolog

所以我想让这段代码在线性时间内执行,而且我不确定是什么让它需要很长时间,所以所有的帮助都会得到满足。 很抱歉没有解释早些时候该程序的功能,medellangd几乎计算了字符串中发送的单词的平均长度。

medellangd([],0) :- !.
medellangd([Head1|[]], 0) :-
             \+ check(Head1), !.
medellangd([Head1|[]], 1) :- !.

medellangd(Text, AvgLen) :- 
                medel(Text, X, Y),
                AvgLen is X/Y.

medel([], 0, 0) :- !.
medel([Head1,Head2|Tail], Letters, Words) :- 
                check(Head1),
                check(Head2), !,
                medel([Head2|Tail], Letters1, Words),
                Letters is Letters1 + 1.

medel([Head1|Tail], Letters, Words) :- 
                check(Head1),
                medel(Tail, Letters1, Words1), !,
                Letters is Letters1 + 1,
                Words is Words1 + 1.

medel([_|T], Avg, Words) :-
                medel(T, Avg, Words).



% We check that the input is a letter.
check(X) :-
                (X >= 65, X =< 90);
                (X >= 97, X =< 122).

1 个答案:

答案 0 :(得分:0)

好吧,好像是我检查它的方法是问题,通过在头上使用char-type而不是我的检查它解决了我的问题,我让我在线性时间运行。