我正在尝试一个单词计算器..从文件中读取单词...将它们翻译成数字然后计算结果..我设法做了所有这些但我想我的程序中有两个错误..
我主要有两个功能......
提取物(字), 计算(单词,0)。
extract将从文件中读取..然后返回一个单词列表.. ex:[one,plus,three] .. 现在计算会将这些单词的值转换为数字并计算.. 我也设法做到了.. 现在的错误是:如果我在文件中遇到停止,我必须停止阅读并终止.. 所以,如果单词是[停止]结束。 我试过以下......
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).
如果单词没有停止..然后去计算..但它不起作用!!
我很感激帮助.. 谢谢
答案 0 :(得分:3)
副作用(这里:从文件中读取并继续下一个术语)在回溯时不会被撤消。您可以读取一次,然后根据读取术语使用if / then / else或辅助谓词进行选择,例如:
execute :-
extract(Words),
( Words == [stop] -> nl, write('Terminating ...')
; calculate(Words, 0)
).
在SWI-Prolog中,考虑使用library(pio)
通过dcg描述的纯文件读取,它按预期处理回溯。