【发布时间】:2018-08-22 16:16:48
【问题描述】:
/* Define a Prolog predicate replicate/3 which corresponds to
* the Haskell function of the same name, except that the numeric
* argument is expressed symbolically.
*
* For example, replicate(s(s(s(0))),a,[a,a,a]) should be satisfied.
*/
到目前为止,我已经找到了这个解决方案:
replicate(0,_,[]).
replicate(X,Y,[Y|Z]) :- replicate(p(X),Y,Z).
但问题是 s(s(s(0))) 没有被 pred 函数减少。结果是 p(p(p(s(s(s(0))))))
你们能帮帮我吗?
【问题讨论】:
-
Prolog 不会这样评估。请改用
replicate(s(X), Y, [Y|Z]) :- replicate(X, Y, Z).。 -
哦,好吧,成功了!非常感谢@DanielLyons
-
没问题。 :) 请注意 Prolog,它的评估方案与 Haskell 等其他语言非常不同。 :)
-
@Will:haskell 标签真的合适吗?
-
@false OP 引用了 Haskell 库函数,作为参考。
标签: list haskell prolog replicate successor-arithmetics