Prolog给出了is_absolute_file_name未处理的异常

时间:2015-11-06 00:31:51

标签: prolog

我是Prolog的新手,在学校上课时学习它。我们明天将进行这项重大测试,因为我正在这里学习,我试图从此测试的先前版本中完成一些任务。一个特殊的任务是取一个字符串并在每个字符“a”后加上“ - ”。因此,例如单词“example”看起来像“exa-mple”。

我为它编写了一个代码:

kriipsuga(S6ne,R) :-
  name(S6ne,X),
  write(X),
  goThrough(X,Y),
  name(R,Y).

goThrough([X|Xs],Y) :-
  X == 97,
  append(Y,[97],Z),
  append(Z,[45],O),
  goThrough(Xs,O).

goThrough([X|Xs],Y) :-
  X \= 97,
  append(Y,[X],O),
  goThrough(Xs,O).

goThrough([],Y) :- write(Y),Y.

这是错误:

?- goThrough([1,2,3,4],Y).
[1, 2, 3, 4]
ERROR: Unhandled exception: is_absolute_file_name/1: Type error: `text' expected, found `1'

谷歌搜索没有给出任何结果,也许你们可以帮我搞清楚。

谢谢:)

1 个答案:

答案 0 :(得分:1)

传统上,快捷方式[File1, File2, ...]在Prolog中用作编译和加载源文件(通常为consult/1)的谓词的简写。 file参数扩展为绝对文件路径。在您的代码中,最后一个子句是:

goThrough([],Y) :- write(Y),Y.

在您的示例查询中,此子句最终被使用并且发出了调用[1|_],因此您得到了错误。为清楚起见,请尝试使用查询跟踪执行:

?- trace, goThrough([1,2,3,4],Y).