我正在上编程范式课程。目前我们正在学习 Prolog,而我陷入了不同的范式。我试图从命令式转换的函数之一是一个相对简单的函数。
foo(A,B,C)
if(A > B) C is 1
if(A < B) C is -1
if(A = B) C is 0
我可以很容易地在 Prolog 中做到这一点。
foo(A,B,C) :- sub(A-B,C).
sub(E, C) :- E = 0, C is 0.
sub(E, C) :- E > 0, C is 1.
sub(E, C) :- E < 0, C is -1.
问题是,我只能在整个谓词中使用一个“是”(不能定义一个较小的谓词来调用 Is 并调用它来代替或任何东西),并且我不能使用 Prolog 的 if/else 构造。我无法弄清楚如何以声明的方式考虑这个问题。
我想也许我可以做一些类似 C is (AB)/abs(AB) 的事情,但这会在 A=B 上中断,并且需要 2 个“is”语句。我只是卡住了。