如何获取用户输入prolog并存储它

如何获取用户输入prolog并存储它,prolog,prolog-toplevel,Prolog,Prolog Toplevel,我正在尝试让用户输入他们的生日,这样我就可以告诉他们他们的星座。然而,我很难得到他们的真实生日和月份。谁能帮帮我吗?我试着将读取分为不同的函子,但我总是出错。合并两个读取时出现的错误是“语法错误:运算符优先级冲突”。分离两个读取时出现的错误是“错误:=:=/2:参数未充分实例化。” 当我将以下内容组合在一起时进行编码: start :- read_month, read_month :- write('Enter your birth month (month followed b

我正在尝试让用户输入他们的生日,这样我就可以告诉他们他们的星座。然而,我很难得到他们的真实生日和月份。谁能帮帮我吗?我试着将读取分为不同的函子,但我总是出错。合并两个读取时出现的错误是“语法错误:运算符优先级冲突”。分离两个读取时出现的错误是“错误:=:=/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).
当我分离代码时,代码如下:

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).

作为初学者,不要这样开始。(您的第一个程序在语法上不正确;第一条规则不以句点结束)

相反,请编写一个可以直接在顶层使用的关系
month\u day\u sign/3
,如下所示:

?- month_day_sign(7,24,Sign).
Sign = leo.
这是您通常与Prolog交互的方式。因此,您正在利用顶级shell的功能

一旦你掌握了这一点,你可以做一些额外的接口周围。但是不要走另一条路



通过分离这两个“动作,
X
现在与
horoscope(X,Y)

断开连接,因为这没有回答问题。这个答案应该是一个很好的注释或旁注,可以作为实际问题的答案。@Xaser,无意中看到了这个问题和你的评论,提供的答案比问的更好,也比op接受的更好,所以这怎么不回答这个问题(因为它被接受)??@coder,答案可能会被接受,因为OP对提供的解决方案很满意,尽管它没有达到他最初的意图。。然而,还有许多其他人在谷歌上遇到了这个问题,对于谁来说,提供的替代方案是不可行的,他们仍然在寻求一种方法来完成问题所要求的(即使用适当的终端查询)。