2010-12-31 9 views
2

단어 계산기를하려고합니다. 파일에서 단어를 읽고 숫자로 변환 한 다음 결과를 계산합니다. 나는 그 모든 것을 처리 할 수 ​​있었지만 프로그램에 두 가지 버그가 있다고 생각합니다. ..프롤로그 백 트랙

I는 주로 두 가지 기능 ...

추출물 (단어)가 계산 (단어, 0).

추출물은 파일에서 읽어 .. 다음 단어의 목록을 반환합니다 .. 예 : [하나, 플러스, 세] ... 지금 에게 .. 난을 숫자로이 단어의 값을 번역하고 계산합니다 계산 그것도 할 수 있습니다 .. 이제 버그가 있습니다 : 나는 파일에서 멈추지 않으면 읽고 멈추어야합니다 .. 그래서 단어가 [끝] 인 경우. 내가

execute :- 
extract(Words), 
Words \= [stop],execute(Words). 
execute(Words) :- 
calculate(Words,0). 

말씀 경우 ..하려고 노력했다 .. 는 내가 .. 성공적으로 종료 다음 ...

execute :- 
extract(Words), 
Words = [stop],nl,print('Terminating ...'),!. 
execute :- 
extract(Words), 
calculate(Words,0). 

시도했지만 내가 두 번 이상 추출로 라인을 건너 뛰고 멈추지 않습니다 .. 그럼 가서 계산 ..하지만 작동하지 !! 내가 도움을 주셔서 감사합니다

에 .. 당신에게

답변

3

부작용 감사 (여기를 : 파일에서 읽고 다음 학기로 이동) 역 추적에 취소되지 않습니다. 한 번 읽고 예를 들어/다음/다른 사람 또는 보조 조건이있는 경우에 다음 읽기 기간에 따라 선택을 할 수 있습니다

SWI - 프롤로그에서
execute :- 
     extract(Words), 
     ( Words == [stop] -> nl, write('Terminating ...') 
     ; calculate(Words, 0) 
     ). 

, 를 통해 설명 읽어 들이기 순수 파일 library(pio) 사용을 고려 예상대로 백 트랙킹을 처리합니다.

+0

응답 해 주셔서 감사합니다. 나는 그걸하려고했습니다 .. 그게 .. 인쇄를 .. 잡는 중입니다.하지만 계속 읽고 있습니다. 나는 파일을 파싱하는 것을 멈추고 싶습니다. 읽는 것을 그만두라고 말했습니다. 고맙습니다. ..''pio'에 대한 언급을 위해 – AhmadAssaf

+1

s (X)를 주셔서 감사합니다. – repeat