2014-11-24 6 views
1

사용자에게 생일을 입력하게하여 그들에게 그들의 조디악 간판을 말할 수있게하려고합니다. 그러나 실제 생일과 월을받는 데 어려움을 겪고 있습니다. 누군가 나를 도울 수 있을까요? 읽는 것을 다른 펑터로 분리하려고했지만 오류가 계속 발생합니다. 두 읽기를 결합 할 때 발생하는 오류는 "구문 오류 : 연산자 우선 순위 충돌"입니다. 두 개의 읽기를 구분할 때 발생하는 오류는 "ERROR : = : =/2 : 인수가 충분히 인스턴스화되지 않았습니다."입니다. 나는 읽기 결합사용자 입력 프롤로그를 가져 와서 저장하는 방법

코드 :

start :- 
    read_month, 

read_month :- 
    write('Enter your birth month (month followed by a .): '), 
    nl, 
    read(X), 
    write('Enter your day of birth (followed by a .): '), 
    nl, 
    read(Y), 
    horoscope(X,Y). 

코드 나는 읽기 분리 : 초보자로서

start :- 
    read_month, 
    read_day. 

read_month :- 
    write('Enter your birth month (month followed by a .): '), 
    nl, 
    read(X). 

read_day :- 
    write('Enter your day of birth (followed by a .): '), 
    nl, 
    read(Y), 
    horoscope(X,Y). 

답변

3

은 그렇게 시작되지 않습니다. 첫 번째 규칙은 마침표로 끝나지 않습니다.

?- month_day_sign(7,24,Sign). 
Sign = leo. 

당신이 일반적으로 프롤로그와 상호 작용하는 방법을 방법 :

대신, 당신과 같이, 최상위에서 직접 사용할 수있는 관계 month_day_sign/3 물품. 그래서 당신은 최상위 쉘의 기능을 이용하고 있습니다.

일단 마스터했으면 주변에 몇 가지 추가 인터페이스를 만들 수 있습니다. 그러나 다른 방향으로 가지 마라! 이 질문에 대답하지 않는 한 분리 모두 "행동"으로


X은 지금 ... horoscope(X,Y)에서을 downvoted

+0

을 끊어집니다. 이 대답은 실제 질문에 대한 답변과 함께 좋은 설명이나 쪽지를 작성했을 것입니다. – Xaser

+1

@Xaser, 우연히이 질문과 의견을 보았습니다. 대답은 요청한 것보다 더 최적화 된 방식이며 op에서 받아 들였습니다. 그렇다면이 질문에 답할 수 없습니다 (받아 들였기 때문에) ?? – coder

+0

@ 코더, OP는 제공된 해결책에 만족했기 때문에 대답이 받아 들여 졌을 것입니다. 비록 처음에 의도 한 일을하지 않더라도 .. 그러나 많은 사람들이 Google에서이 질문을 건너오고 있습니다. 대안은 실행 가능하지 않고 질문을 수행하기위한 방법을 찾고 있습니다 (즉, 적절한 터미널 쿼리로 작업). – Xaser

관련 문제