- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在上一门关于编程范式的类(class)。目前我们正在学习 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”(不能定义一个较小的谓词来调用 Is 并调用它或其他任何东西),而且我不能使用 Prolog 的 if/else 结构。我不知道如何以声明的方式思考这个问题。
我想也许我可以做一些像 C is (A-B)/abs(A-B) 这样的事情,但是在 A=B 时会中断,并且需要 2 个“is”语句。我只是卡住了。
最佳答案
为了声明式编程,我们必须考虑要声明的内容,然后才能对其进行描述。为此,我会尝试编写谓词,以便它表达为什么 C
的值。根据 A
的相对大小在三种可能的状态之间交替和 B
.这是一个与您用 foo
描述的形式相同的谓词:
comparison(A, B, less) :- A < B.
comparison(A, B, equal) :- A =:= B. %% =:=/2 is "True if expression A evaluates to a number equal to B".
comparison(A, B, greater) :- A > B.
您不需要前端谓词 foo/3
.您可能会这样阅读这些行:“如果 comparison
是 A
关于 B
,则 <Value>
和 A
是 <relation>
。”该程序由描述规则 B
的三个规则组成. “3”表示此规则定义了作为参数提供给它的 3 个元素之间的关系。
你可以查询这个程序:
?- comparison(1,3, X).
X = less ;
false.
关于Prolog:我陷入了一种命令式的心态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260019/
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我正在做一个相当简单的示例来学习如何使用 ocaml 作为命令式语言。我的猜测是我搞乱了分号,但我在代码中找不到任何错误 let sort array = for index = 0 to (Arra
我是函数式编程的新手,我刚遇到一些事情,想知道是否有解决办法。 假设我有 myArray = [ { a : 1 } { a : 4 } { a : 5 } { a : 6 } {
我正在尝试在我的 Node 应用程序的 dockerode 容器中编译并执行 java 程序。我可以通过首先使用基本 javascript 写入 tmp.java 文件,然后运行以下 shell 命令
Quicksort 通常被描述为一种原位(就地)算法,尽管它需要 O(log n) 堆栈空间。那么 in situ 是否意味着“需要少于 O(n) 的额外空间”,或者堆栈空间通常不算作空间复杂度(但为
我需要一些关于 Reactive JS 和“if 语句”的帮助 我不知道如何在 Reactive JS 中实现一个简单的代码在 Spark AR 中是这样的: if( boolvalue=true)
我是 Scala 的新手,我正在尝试从 IndexedSeq 创建一个大 map ,我在 SO 上发现了一个提及,即函数式 map 创建比命令式 Java map 创建慢得多,我决定自己测试一下。到目
我是一名优秀的程序员,十分优秀!