我必须写一个谓词才能像下面这样工作:
?- 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) ? ;
no
请注意中的下划线error(E,_)
隐藏了实现定义的差异。实现提供了有关此参数的其他信息,尤其是它们会揭示该错误atom_chars/2
或atom_concat/3
产生该错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句