Вопрос

Я пытаюсь сделать калькулятор слов..прочитать слова из файла..переведи их в цифры и потом посчитай результат..мне удалось сделать все это, но я думаю, что в моей программе есть две ошибки..

У меня в основном две функции...

экстракт(Слова), вычислить(Слова,0).

экстракт будет читаться из файла..а затем вернуть список слов..бывший:[один, плюс, три] ..теперь расчет переведет значение этих слов в числа и посчитает..мне тоже удалось это сделать..теперь ошибки:я должен прекратить чтение и завершить его, если встречу остановку в файле..так что, если бы Words был [стоп] Конец.я попробовал следующее...

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).

если Слова не стоп..тогда иди посчитай..но он не работает!!

я ценю помощь..Спасибо

Это было полезно?

Решение

Побочные эффекты (здесь:чтение из файла и переход к следующему термину) не отменяются при возврате.Вы можете прочитать один раз, а затем сделать выбор на основе прочитанного термина с помощью if/then/else или вспомогательного предиката, например:

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

В SWI-Prolog рассмотрите возможность использования library(pio) для чистого чтения файлов, описанного через , который обрабатывает возврат, как и ожидалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top