Performance 是否有一个库/技术来收集Prolog中最优子句排序的统计信息?

Performance 是否有一个库/技术来收集Prolog中最优子句排序的统计信息?,performance,optimization,prolog,swi-prolog,sicstus-prolog,Performance,Optimization,Prolog,Swi Prolog,Sicstus Prolog,我正在写一个程序,我需要看看字符串是否匹配特定的模式。现在,我已经在Prolog中实现了一个规则匹配模式,有超过20种不同的定义 最后,我通过模式检查谓词运行所有长度达到一定长度的二进制字符串。这个程序相当慢(就像Prolog经常做的那样),而且因为有这么多不同的定义,我理想地希望对它们进行排序,以便最匹配的是排序中最早的,因此由Prolog首先匹配,尽可能避免回溯 我现在正在使用SWI Prolog,但我可以访问SICStus,所以我愿意使用它或免费获得的任何Prolog解释器。你应该考虑使用

我正在写一个程序,我需要看看字符串是否匹配特定的模式。现在,我已经在Prolog中实现了一个规则匹配模式,有超过20种不同的定义

最后,我通过模式检查谓词运行所有长度达到一定长度的二进制字符串。这个程序相当慢(就像Prolog经常做的那样),而且因为有这么多不同的定义,我理想地希望对它们进行排序,以便最匹配的是排序中最早的,因此由Prolog首先匹配,尽可能避免回溯


我现在正在使用SWI Prolog,但我可以访问SICStus,所以我愿意使用它或免费获得的任何Prolog解释器。

你应该考虑使用DCG和cuts。

你应该研究cuts。这方面的prolog语法是:

!
SWI Prolog已经完成了,这可以帮助您完成任务


如果模式之间存在公共部分,左分解模式规则并应用剪切可以改善运行时。这样的分析应该和统计结合起来。

我确实经常使用切割。然而,削减的有效性在很大程度上取决于条款的顺序,也就是说,如果最后一个条款总是成功的,那么我是否在其他条款成功后削减并不重要,因为我仍然必须尝试所有这些条款。我已经使用了不少削减条款,在方便的时候也使用了DCG条款。DCG是否提供了速度提升?配置文件告诉我们哪些目标花费的时间最多,但它是否告诉我们每个目标的哪个定义花费的时间最多?我经常使用它,我只是不知道如何让它提供与订购相关的信息。你是对的,需要一个“发送”符号。但是你也可以自己数电话。。。