私はエキスパートシステムを作成しましたが、いくつかのバグがあります。これは、ユーザーに「はい」または「いいえ」(スペイン語で「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の出力であると確信しています。
あなたは述語句の定義内に改行を使用することを許可されています。各カンマの後に1文字を入れると読みやすくなります。 – lurker