我正在开发一个大学作业程序,目前我正试图从一个写在文件上的绑架程序中写一些否认作为完整性约束,但我遇到了一些问题。
我的任务谓词如下所示:
append_denials(_, []).
append_denials(File, [fail(_, Den)|Tail]) :-
open(File, append, Stream),
write(Stream, 'ic :- '),
write_denials(Stream, Den),
write(Stream, '.'),
nl(Stream),
close(Stream),
append_denials(File, Tail).
write_denials(Stream, [T]) :-
write(Stream, T).
write_denials(Stream, [H|T]) :-
write(Stream, H),
write(Stream, ', '),
write_denials(Stream, T).
他们会通过以下方式进行查询:
append_denials('denyagain.txt', [fail([_C],[battery_flat(_C),lights_go_on(_C)]),fail([_D],[has_no_fuel(_D),\+fuel_indicator_empty(_D),\+broken_indicator(_D)])]).
问题是,如果我将它们放在一个单独的文件中(使用这些谓词而不是其他任何东西),它们似乎可以工作,但是当在程序中使用时(我无法在此处发布的 3000 行 Prolog ......)我明白了错误:
! Domain error in argument 1 of write/2
! expected stream, but found '$stream'(139681177337584)
! goal: write('$stream'(139681177337584),\+broken_indicator(_116))
% source_info
我检查了,我可以确认谓词没有被覆盖......我真的不明白这是怎么发生的。
非常欢迎任何关于我可能出错的地方的建议或线索!
非常感谢,大卫。