Loops 序言,无限循环
我没有使用下面的代码来检查从476开始到520结束的所有学生IDLoops 序言,无限循环,loops,prolog,Loops,Prolog,我没有使用下面的代码来检查从476开始到520结束的所有学生ID schedule_errors(A,B,C):- Errors is 0, check_Courses(476,A,B,C,Errors). check_Courses(X,A,B,C,Errors):- . . . . . . Y is X+1, check_Courses(Y,A,B,C,Er). 问题是程序一直不稳定地运行,忽略我的退出循环谓词 check_Courses(5
schedule_errors(A,B,C):-
Errors is 0,
check_Courses(476,A,B,C,Errors).
check_Courses(X,A,B,C,Errors):-
. .
. .
. .
Y is X+1,
check_Courses(Y,A,B,C,Er).
问题是程序一直不稳定地运行,忽略我的退出循环谓词
check_Courses(520,A,B,C,Er):-
write('Check complete').
我不明白我做错了什么。我尝试了一个类似的更简单的版本(只是数到10),效果很好
loop(10):-
write('cd finished').
loop(X):-
write(X), nl,
Y is X+1,
loop(Y).
我遗漏了什么?一个重要的观察结果是
循环/1
也不会终止。您可以看到如下示例:
?- loop(1), false.
1
2
3
...
8
9
cd finished10
11
12
13
14
...
49
50
51
...
32394
32395
...
因此,在check_courses/5
中,如果您在包含它的案例之后放置更具体的案例,那么文本上的第一个子句将始终首先被检索
把简单的案例放在更复杂的案例之前 我还使用了trace,当它达到520时,它似乎进入了check_过程(X,A,B,C,Errors):-而不是check_过程(520,A,B,C,Er):-并继续循环 ?- loop(1). ... 42642 42643 ...