2014-11-24 54 views
1

我想讓用戶輸入他們的生日,所以我可以告訴他們他們的星座。但是,我很難得到他們的實際生日和月份。有人可以幫我嗎?我試圖將讀取分隔成不同的函子,但我不斷收到錯誤。當我將兩個讀取結合起來時,出現的錯誤是「語法錯誤:操作員優先級衝突」。我將兩個讀取分開時得到的錯誤是「錯誤:=:=/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/3,你可以在頂層直接使用,就像這樣:

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

那怎麼你通常與Prolog的交互方式。所以你正在利用頂層shell的功能。

一旦你掌握了這一點,你可以做一些額外的接口。但不要走另一條路!


通過分離這兩個「動作」,在X現在從horoscope(X,Y)斷開......

+0

downvoted,因爲這不回答這個問題。這個答案會對實際問題做出回答,並提出一個很好的評論或附註。 – Xaser 2017-11-03 05:57:51

+1

@ Xaser,意外地看到了這個問題和你的評論,提供的答案是比op提供的更好的優化方法,所以這怎麼回答這個問題(因爲它被接受)? – coder 2017-11-03 17:37:41

+0

@coder,答案可能已被接受,因爲OP對所提供的解決方案感到滿意,儘管它沒有做他最初打算做的事情。但是,還有很多其他人在谷歌上遇到這個問題,替代方案是不可行的,他們仍然在尋求一種方法來完成問題的要求(即使用正確的終端查詢)。 – Xaser 2017-11-04 02:55:11