我正在研究一个大学任务的程序,目前我正试图从写在文件上作为完整性约束的诱导程序写一些否认,但我遇到了一些问题。
我对任务的预测看起来像这样:
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)])]).
问题是,如果我将它们放在一个单独的文件上(使用这些谓词而没有其他内容)它们似乎有用,但是在程序中使用时(Prolog的3000行我不能在这里发布...)我收到这个错误:
! Domain error in argument 1 of write/2
! expected stream, but found '$stream'(139681177337584)
! goal: write('$stream'(139681177337584),\+broken_indicator(_116))
% source_info
我检查过,我可以确认谓词没有被覆盖......我真的不明白这是怎么回事。
非常欢迎任何有关我可能出错的建议或线索!
非常感谢, 大卫。