我必须编写一个谓词才能完成如下工作:
?- cat(north,south,X).
X = northsouth
?- cat(alley,'91',Y).
X = alley91
?-cat(7,uthah,H).
Bad Input
H = H
请帮忙..
最佳答案
atom_concat_redefined(A1, A2, A3) :-
( nonvar(A1) -> atom_chars(A1, Chs1) ; true ),
( nonvar(A2) -> atom_chars(A2, Chs2) ; true ),
( nonvar(A1), nonvar(A2) -> true ; atom_chars(A3, Chs3) ),
append(Chs1, Chs2, Chs3),
atom_chars(A1, Chs1),
atom_chars(A2, Chs2),
atom_chars(A3, Chs3).
此定义在 SICStus 或 GNU 等符合标准的实现中产生相同的错误 - 除了性能之外,不应该有其他差异。要比较错误,请使用目标:
?- catch(atom_concat_redefined(A,B,abc+1), error(E,_), true).
E = type_error(atom,abc+1).
请注意 error(E,_)
中的下划线,它隐藏了实现定义的差异。实现在此参数中提供了附加信息,特别是,它们会显示 atom_chars/2
或 atom_concat/3
产生了错误。
关于prolog - 编写谓词来添加原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33450104/