3

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

我主要有两个功能...

提取(字),计算(字,0)。

extract 将从文件中读取 .. 然后返回单词列表 .. 例如:[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).

如果单词没有停止..然后去计算..但它不起作用!

感谢您的帮助..谢谢

4

1 回答 1

3

副作用(这里:从文件中读取并进入下一个学期)不会在回溯中撤消。您可以阅读一次,然后使用 if/then/else 或辅助谓词根据阅读术语做出选择,例如:

execute :-
        extract(Words),
        (   Words == [stop] -> nl, write('Terminating ...')
        ;   calculate(Words, 0)
        ).

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

于 2010-12-31T09:44:35.357 回答