Prolog黄道带和闰年

时间:2013-05-21 03:22:18

标签: prolog

我正在尝试做一些告诉我黄道十二宫的事情,如果今年是闰年这一切都在Prolog中

并且一切看起来都很棒但是当我尝试做cosnult时它会显示错误

这是我的代码

    /* 7. Horóscopo
 horoscopo(Signo,DiaIni,MesIni,DiaFin,MesFin)
<- son del signo Signo los nacidos entre el Dia
Ini/MesIni y el DiaFin/MesFin */


horoscopo(aries,21,3,21,4).
horoscopo(tauro,21,4,21,5).
horoscopo(geminis,21,5,21,6).
horoscopo(cancer,21,6,21,7).
horoscopo(leo,21,7,21,8).
horoscopo(virgo,21,8,21,9).
horoscopo(libra,21,9,21,10).
horoscopo(escorpio,21,10,21,11).
horoscopo(sagitario,21,11,21,12).
horoscopo(capricornio,21,12,21,1).
horoscopo(acuario,21,1,21,2).
horoscopo(piscis,21,2,21,3).


mes(1,31,enero).
mes(2,28,febrero).
mes(3,31,marzo).
mes(4,30,abril).
mes(5,31,mayo).
mes(6,30,junio).
mes(7,31,julio).
mes(8,31,agosto).
mes(9,30,septiembre).
mes(10,31,octubre).
mes(11,30,noviembre).
mes(12,31,diciembre).

signo(Dia,Mes,Signo) :-horoscopo(Signo,D1,M1,D2,M2),((Mes=M1,Dia>=D1,mes(M1,D,_),Dia=<D);(Mes=M2,Dia=<D2,Dia>0)).


anio_bisiesto(L) :-
    partition(es_anio_bisiesto,L,LIn,LOut),
    format('año bisiesto:~w~n',[LIn]),
    format('no año bisiesto:~w~n',[LOut]).


corre:-write('Presiona s para salir, c para continuar: '),
read(Z),
proceso(Z).

proceso(c):-write('Introduce tu día de nacimiento: '),
read(X),
write('Introduce tu mes de nacimiento: '),
read(Y),
calcula(X,Y).

write('Introduce el año: '),
read(a).

es_anio_bisiesto(anio) :-
    R4 is anio mod 4,
    R100 is anio mod 100,
    R400 is anio mod 400,
    ((R4 = 0, R100 \= 0); R400 = 0).

proceso(s):-!.

calcula(X,Y):-write('Tu signo es: '),
signo(X,Y,Signo),
write(Signo),nl,corre.

这是我的错误

ERROR: c:/users/alaenvargut/desktop/a.pl:53:
        Full stop in clause-body?  Cannot redefine ,/2
Warning: c:/users/alaenvargut/desktop/a.pl:62:
        Clauses of proceso/1 are not together in the source-file
% c:/Users/Alaenvargut/Desktop/a.pl compiled 0.00 sec, 1 clauses

请帮帮我

抱歉mi bad english:S

1 个答案:

答案 0 :(得分:0)

你应该试试

proceso(c):-write('Introduce tu día de nacimiento: '),
read(X),
write('Introduce tu mes de nacimiento: '),
read(Y),
calcula(X,Y).
/*
write('Introduce el año: '),
read(a).

es_anio_bisiesto(anio) :-
    R4 is anio mod 4,
    R100 is anio mod 100,
    R400 is anio mod 400,
    ((R4 = 0, R100 \= 0); R400 = 0).
*/
proceso(s):-!.

我认为你正在改进你的代码: 将anio设为变量,并在es_anio_bisiesto

之后移动proceso(s):-!.