prolog - 编写谓词来添加原子

标签 prolog

我必须编写一个谓词才能完成如下工作:

  ?- 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/2atom_concat/3 产生了错误。

关于prolog - 编写谓词来添加原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33450104/

相关文章:

list - 解压缩列表的谓词

Prolog - 面积公式的实现

list - Prolog - 列表中最常见的长度为 N 的序列

prolog - 制定效果公理

list - Prolog 中的反转列表

list - 列表替换中的 Prolog 元素

Prolog:如何创建谓词列表?

list - 具有某些确定性的 member/2 代码

module - Prolog 有包管理器吗?

prolog - 差异列表不完整