2017-04-12 3 views
0

이것은 Prolog의 코드입니다.프롤로그에서 데이터 수신을 중지하지 않습니다.

do(cinema):- parents(yes); (parents(no),weather(windy),money(less)). 
do(play):- parents(no),weather(sunny). 
do(stay):- parents(no),weather(rainy). 
do(shopping):- parents(no),weather(windy),money(more). 
start:- write('Parents: '),read(X),assert(parents(X)), write('Weather: '),read(Y),assert(weather(Y)), write('Money: '),read(Z),assert(money(Z)). 
clear:- retract(parents(X));retract(weather(X));retract(money(X)). 

사용자의 데이터를 수락하고 의사 결정 트리를 사용하여 수행 할 작업을 찾으려고합니다. 나는대로 코드를 실행 해요 :

?-start, do(X). 

그러나 부모를위한 입력을 읽고 일기를 작성하고 데이터를 읽는 유지하지 않습니다.

답변

1

프로그램에는 아무런 문제가 없습니다. http://swish.swi-prolog.org/p/JDAJcUhq.pl을 참조하십시오. 가장 가능성있는 원인은 이미 언급되어 있습니다. "."로 학기를 마치지 못합니다. clear/0은 실제로 틀렸지 만 웹 버전에서는 새로운 쿼리가 새로운 환경에서 실행되기 때문에 필요하지 않습니다.

최소한 SWI-Prolog에서는 콘솔 출력 스트림 플러시가 항상 읽기 전에 완료되므로 터미널에서 읽기 작업 전에 플러시 할 필요가 없습니다.

+1

고마워요! 문제는 내가 처음에했던 방법을 선언하지 않았다는 것입니다. – telekineser

0

목표를 기록한 후에 플러시 목표를 세우고 용어를 원할 때/1을 사용하면서 입력 내용을 완전히 잊지 않도록하십시오.

+0

또한 retractall btw로 변경하고 연결로 변경해야합니다. – user27815

관련 문제