Пролог Откат - PullRequest
       48

Пролог Откат

3 голосов
/ 31 декабря 2010

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

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

экстракт (слова), рассчитать (слова, 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).

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

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

1 Ответ

3 голосов
/ 31 декабря 2010

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

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

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

...