2

我正在探索 Prolog 中的写谓词,但它有时表现不同。我确实浏览了一些帖子,但我无法发现问题。

谓词:

explore_write_predicate(InputList,Index):-
   TempIndex is Index+1,
   select(Element,InputList,TempList),
   write(TempIndex).

询问:

explore_write_predicate([1,2,3,4],1).

结果 :

2
true

上面的代码工作正常,但是当我向写谓词(Element)添加一个参数时,它给出了一个错误。

谓词:

explore_write_predicate(InputList,Index):-
   TempIndex is Index+1,
   select(Element,InputList,TempList),
   write(TempIndex,Element).

询问:

   explore_write_predicate([1,2,3,4],1).

错误:

No permission to call sandboxed `write(_1132,_1134)'
Reachable from:
      explore_write_predicate(A,B)
      swish_trace:swish_call(explore_write_predicate([1,2,3,4],1))
      '$swish wrapper'(explore_write_predicate([1,2,3,4],1),A)

请帮助我为什么会出现这种异常情况。PS 我也看到了 write 的文档,但不能从中得到太多。任何帮助是极大的赞赏。

4

1 回答 1

2

您的错误有两个方面:

首先,您似乎使用SWISH作为您选择的解释器,它锁定了许多输入/输出方法(包括tab/1write/2get_single_char/1put/1等),所以您将无法使用它们。

其次,write/2需要一个流作为它的第一个参数,第二个参数将被写入其中 - 如评论中所述,要写入多个内容,要么将项目作为列表传递,要么使用多次写入。

于 2017-02-17T10:11:24.010 回答