我有一个复杂的程序,其中一部分看起来像这样:
check_list([]).
check_list([X|List]) :- (try_something(X) -> write(1);write(0)),nl,check_list(List).
问题是,当我的列表很大时,Prolog给我“资源错误:内存不足” 。我认为问题可能出在“如果-则-子句”中。所以我尝试了以下方法:
check_list([]).
check_list([X|List]) :- (\+try_something(X) -> write(0);write(1)),nl,check_list(List).
这样,问题就解决了(或者至少只有更大的列表才会出现)。但是,我不知道为什么。这两个版本有何不同?两者不应该都一样吗?