3


0

Пролог Откат

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

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

извлечь (слова), рассчитать (слова, 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 Answer


3


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

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

В SWI-Prolog рассмотрите возможность использования http://www.swi-prolog.org/pldoc/man?section=pio [library (pio)] для чистого чтения файлов, описанного по ссылке: / questions / tagged / dcg [dcg ], который обрабатывает возврат в соответствии с ожиданиями.