0

我想要一个完整的例子。

我尝试过类似的东西:

% swipl -s lib_safecode.pl
% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 2,224 bytes
%  library(assoc) compiled into assoc 0.01 sec, 20,744 bytes
%   library(error) compiled into error 0.00 sec, 10,156 bytes
%   library(lists) compiled into lists 0.00 sec, 15,308 bytes
%  library(debug) compiled into prolog_debug 0.01 sec, 38,140 bytes
% /home/janus/Desktop/lib_safecode.pl compiled into safe_code 0.02 sec, 80,464 bytes

?- assert(tree(oak)).
true.

?- safe_code(tree(A)).
ERROR: toplevel: Undefined procedure: safe_code/1 (DWIM could not correct goal)
?- safe_code(tree(A)).
ERROR: toplevel: Undefined procedure: safe_code/1 (DWIM could not correct goal)
?- safe_code:safe_code(tree(A)).
ERROR: toplevel: Undefined procedure: safe_code:safe_code/1 (DWIM could not correct goal)
?- safe_code:safe(tree(A)).
ERROR: Undefined procedure: safe_code:safe/1
ERROR:     However, there are definitions for:
ERROR:         safe_code:safe/5
false.

?- safe_code:safe(tree(A),_,_,_,_).
ERROR: Out of global stack
?- use_module('lib_safecode.pl',[safe_code]).
ERROR: import/1: safe_code:safe_code/0 is not declared public (still imported)
true.

[trace]  ?- safe_code(tree(A)).
ERROR: toplevel: Undefined procedure: safe_code/1 (DWIM could not correct goal)
[trace]  ?- 
4

1 回答 1

2

使用似乎是safe_goal(:Goal).为了测试是否:Goal安全。

例如:

?- safe_goal(a == 1).

会产生true.

?- safe_goal(open(passwords.txt, read, Stream)).

会产生false.

唯一导出的谓词是safe_goal/1你必须使用的这个,而不是safe_code/1.

于 2012-09-06T14:48:48.200 回答