【发布时间】:2010-06-10 17:34:47
【问题描述】:
我正在尝试格式化程序的结果,但遇到了困难。
我想给出这样的结果:
Res = do(paint(x) do(clean(a), do(repair(b) , initialState)))
基本上,我想将连续的术语连接到 initialState atom,但是它不适用于 atom_concat,因为要连接的其他术语不是原子,而且我想在每次通过“do”函数时添加 ) .
所以它应该是这样的:Res = initialState.
当 do 函数被调用时,我会有一个类似的函数
concatenateTerm(Pred, Res, Res).
例如 Pred beeing repair(b) 并获取结果:res = do(repair(b),initialState)。
这样可以吗?
谢谢
【问题讨论】:
-
可能我不明白你的意思,但是......我想你的意思是
concatenateTerm(Pred,Res,ResNext)。在这种情况下,将其定义为concatenateTerm(A, B, do(A, B)).。 -
但是 concatenateterm 不会给我 res 结果。我可以执行 Temp = Res,然后调用 concatenateTerm (Pred,Temp, Res),它将 Pred 与 Temp 连接并在 Res 上给出结果,但又一次,它不适用于 atom_concat,因为它因非原子术语而失败。而且它也不会在末尾添加 )。
-
您想从简单的术语中构建一个复杂的术语?
-
原子在逻辑上是不能分成更小的部分(这就是为什么“原子”)。 IE。如果您有
Steel = combine(carbon, coal),您可以通过combine(X, Y) = Steel获取超出期限的元素combine(carbon,coal),但您无法获得任何超出期限的元素carbon,因为那是atom。您可以对原子做的唯一事情是尝试将它们与变量统一(有规则atom_chars,但它们是“特殊的”)。 -
对不起,我错过了对我的答案的评论,我已经评论了。
标签: prolog concatenation