我是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'
谷歌搜索没有给出任何结果,也许你们可以帮我搞清楚。
谢谢:)
答案 0 :(得分:1)
传统上,快捷方式[File1, File2, ...]
在Prolog中用作编译和加载源文件(通常为consult/1
)的谓词的简写。 file参数扩展为绝对文件路径。在您的代码中,最后一个子句是:
goThrough([],Y) :- write(Y),Y.
在您的示例查询中,此子句最终被使用并且发出了调用[1|_]
,因此您得到了错误。为清楚起见,请尝试使用查询跟踪执行:
?- trace, goThrough([1,2,3,4],Y).