题
我正在尝试做一个单词计算器。读取文件中的单词。将它们翻译成数字,然后计算结果。.我设法完成了所有这些操作,但我认为我的程序中有两个错误。
我主要有两个功能...
提取(单词),计算(单词,0)。
提取物将从文件中读取..然后返回单词列表。例如:[一个,加上三个] ..现在计算将这些单词的值转换为数字并计算。.我也设法做到了。现在,错误是:如果我在文件中遇到停止,我必须停止阅读和终止。我尝试了以下...
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).
如果单词不停止..然后去计算..但是它不起作用!!
我感谢帮助..谢谢
解决方案
副作用(此处:从文件中读取并移至下一个学期)在回溯时没有撤消。您可以阅读一次,然后根据读取术语进行选择,例如/then/then/then或辅助谓词:
execute :-
extract(Words),
( Words == [stop] -> nl, write('Terminating ...')
; calculate(Words, 0)
).
在Swi-Prolog中,考虑使用 library(pio)
用于描述的纯文件阅读 DCG, ,这会按预期处理回溯。
不隶属于 StackOverflow