Prolog-如何将表达式赋值给变量

Dag*_*ago 2 string expression predicate prolog

您好我正在尝试构建一个谓词,对于给定的参数返回一个全新的表达式.假设我想通过添加两个数字来创建新表达式.所以当我执行这样的事情时.

my_predicate(1,2,X).
Run Code Online (Sandbox Code Playgroud)

Prolog将返回:

X = 1+2
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道如何构建这样的结构并将其分配给X变量.我很感激有关这个主题的建议.

tas*_*tas 5

谓词应该描述潜在的参数和它们可能形成的表达式之间的关系,所以为什么不把它称为args_expr/3.这是一个加法和乘法的例子.您可以轻松地为其他表达式扩展此方法:

args_expr(Arg1,Arg2,Arg1 + Arg2).
args_expr(Arg1,Arg2,Arg1 * Arg2).
Run Code Online (Sandbox Code Playgroud)

示例查询:

   ?- args_expr(1,2,X).
X = 1+2 ? ;
X = 1*2

   ?- args_expr((1+2),(3*4),X).
X = 1+2+3*4 ? ;
X = (1+2)*(3*4)

   ?- args_expr(1+2,3*4,X).
X = 1+2+3*4 ? ;
X = (1+2)*(3*4)
Run Code Online (Sandbox Code Playgroud)

  • 您甚至不需要操作员周围的报价.`args_expr(A,B,A + B).`就足够了. (2认同)
  • @Dago你只需要决定你想要什么.你是否希望`X`成为Prolog术语`1 + 2`,相当于术语`(1 + 2)`,因为在这种情况下外括号是多余的,或者你想要原子,''(1 +2)'`?作为一个术语,除非术语更复杂,否则括号是不必要的.例如,`args_expr(A,B,C,A +(B + C)).`被调用,`args_expr(1,2,3,X)`将产生,`X = 1 +(2 + 3) `. (2认同)