首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog回溯

Prolog回溯
EN

Stack Overflow用户
提问于 2010-12-31 11:56:48
回答 1查看 1.2K关注 0票数 3

我正在试着做一个单词计算器。从文件中读取单词..将它们转换为数字,然后计算结果。我设法做到了所有这些,但我认为我的程序中有两个bug ..

我主要有两个功能...

提取(单词),计算(单词,0)。

提取将从文件中读取..然后返回一个单词列表。例:一加三..现在,calculate会将这些单词的值转换为数字并进行计算。我也设法做到了..现在的错误是:如果我在文件中遇到stop,我必须停止读取并终止。所以如果单词是停止结束的话。我尝试了以下几种方法。

代码语言:javascript
复制
execute :-
 extract(Words),
 Words = [stop],nl,print('Terminating ...'),!.
execute :-
 extract(Words),
 calculate( Words,0).

它成功地终止..但它跳过行,因为我多次提取..我试着去做..

代码语言:javascript
复制
execute :-
 extract(Words),
 Words \= [stop],execute(Words).
execute(Words) :-
 calculate( Words,0).

如果这句话不是停止..然后去计算一下..但是它不起作用!!

我很感谢你的帮助..谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-31 17:44:35

在回溯过程中,副作用(这里:从文件中读取并继续下一项)不会被撤销。您可以读一次,然后根据读过的术语if/ then /else或辅助谓词做出选择,例如:

代码语言:javascript
复制
execute :-
        extract(Words),
        (   Words == [stop] -> nl, write('Terminating ...')
        ;   calculate(Words, 0)
        ).

在SWI-Prolog中,考虑对通过dcg描述的纯文件读取使用library(pio),它可以按预期处理回溯。

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

https://stackoverflow.com/questions/4567973

复制
相关文章

相似问题

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