我製作了專家系統,但我有一些錯誤。它的作品詢問用戶一些問題,他們回答「是」或「否」(西班牙文中的'si','no')。問題是,當我驗證答案時,程序返回「false」。 這裏的代碼有錯誤的部分:無法在PROLOG中驗證輸入
:- dynamic respondeSi/1.
:- dynamic respondeNo/1.
:- dynamic seriesSugeridas/2.
abrirBase :-
retractall(seriesSugeridas(_,_)),
retractall(respondeSi(_)),
retractall(respondeNo(_)),
consult('TP4.txt'). %modificar directorio
inicio:-
abrirBase, writeln('¡Bienvenido! Vamos a ver qué serie podemos recomendarte...'),
filtrar_series.
filtrar_series:-
preguntar_duracion(RtaDuracion),
preguntar_serie_terminada(RtaTermino),
preguntar_serie_nueva(RtaSerieNueva),
obtener_series(RtaDuracion, RtaTermino, RtaSerieNueva),
consultar_caracteristicas.
preguntar_duracion(RtaDuracion):-
write('¿Tenés bastante tiempo libre? Respuesta (si|no): '),
read(RtaDuracion), RtaDuracion \= si, RtaDuracion \= no,
writeln('Respuesta inválida, conteste nuevamente.'),
preguntar_duracion(RtaDuracion).
%%AFTER INPUTTING THE ANSWER ONCE MORE HERE,
IT RETURNS "false" AND ENDS THE PROGRAM
preguntar_serie_terminada(RtaTermino):-
write('¿Buscás una serie que aún no haya terminado? Respuesta (si|no): '),
read(RtaTermino), RtaTermino \= si, RtaTermino \= no,
writeln('Respuesta inválida, conteste nuevamente.'),
preguntar_serie_terminada(RtaTermino).
preguntar_serie_nueva(RtaSerieNueva):-
write('¿Buscás una serie nueva? Respuesta (si|no): '),
read(RtaSerieNueva), RtaSerieNueva \= si, RtaSerieNueva \= no,
writeln('Respuesta inválida, conteste nuevamente.'),
preguntar_serie_nueva(RtaSerieNueva).
它爲什麼會發生?謝謝
更新:它總是會返回false。我很確定,錯誤是RtaDuracion \ = si的輸出。
你被允許謂語從句定義中使用換行符。在每個逗號後加上一個將有助於提高可讀性。 – lurker