在 Prolog 中使用写谓词时出错

Error while using the write predicate in Prolog

我正在探索 Prolog 中的 write 谓词,但它有时表现不同。我确实经历了 some posts 但我无法发现问题。

谓词:

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

上面的代码工作正常,但是当我向 write predicate(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)

请帮我看看为什么会出现这种异常。 P.S 我也看到了 write 的文档,但无法从中得到太多。 非常感谢任何帮助。

你的错误是two-fold:

首先,您似乎在使用 SWISH as your interpreter of choice, which locks away a number of input/output methods (including tab/1, write/2, get_single_char/1, put/1,等等),因此您将无法使用它们。

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