我正在尝试做一个单词计算器。读取文件中的单词。将它们翻译成数字,然后计算结果。.我设法完成了所有这些操作,但我认为我的程序中有两个错误。

我主要有两个功能...

提取(单词),计算(单词,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) 用于描述的纯文件阅读 , ,这会按预期处理回溯。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top