我正在试着做一个单词计算器。从文件中读取单词..将它们转换为数字,然后计算结果。我设法做到了所有这些,但我认为我的程序中有两个bug ..
我主要有两个功能...
提取(单词),计算(单词,0)。
提取将从文件中读取..然后返回一个单词列表。例:一加三..现在,calculate会将这些单词的值转换为数字并进行计算。我也设法做到了..现在的错误是:如果我在文件中遇到stop,我必须停止读取并终止。所以如果单词是停止结束的话。我尝试了以下几种方法。
execute :-
extract(Words),
Words = [stop],nl,print('Terminating ...'),!.
execute :-
extract(Words),
calculate( Words,0).它成功地终止..但它跳过行,因为我多次提取..我试着去做..
execute :-
extract(Words),
Words \= [stop],execute(Words).
execute(Words) :-
calculate( Words,0).如果这句话不是停止..然后去计算一下..但是它不起作用!!
我很感谢你的帮助..谢谢
发布于 2010-12-31 17:44:35
在回溯过程中,副作用(这里:从文件中读取并继续下一项)不会被撤销。您可以读一次,然后根据读过的术语if/ then /else或辅助谓词做出选择,例如:
execute :-
extract(Words),
( Words == [stop] -> nl, write('Terminating ...')
; calculate(Words, 0)
).在SWI-Prolog中,考虑对通过dcg描述的纯文件读取使用library(pio),它可以按预期处理回溯。
https://stackoverflow.com/questions/4567973
复制相似问题