Questions tagged «declarative-programming»

9
声明式编程的梦想[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为什么没有实现声明式编程的梦想?有什么具体的障碍阻碍?举个简单的例子,为什么我不能说 sort(A) is defined by sort(A) in perm(A) && asc(sort(A)) 并自动获得排序算法。perm表示排列,asc表示上升。

2
SQL是声明性的吗?
我之所以问,是因为我在SQL中看到的许多问题总计为:“这很慢。如何加快速度”?还是教程说明“以这种方式而不是以这种方式这样做,因为它更快”。 在我看来,SQL的很大一部分是知道如何执行表达式,并从中选择性能更好的表达式样式。这与声明性编程的一个方面不符-只是让系统决定要如何最好地执行计算,而只需指定计算应产生的内容。 SQL引擎不应该不在乎您是否使用过它in,exists或者join它是否确实是声明性的,是否应该仅在合理的时间内通过三种方法中的任何一种为您提供正确的答案?最近的帖子提示了最后一个示例,该帖子是我在开始段落中提到的类型。 指标 我想我可以使用的最简单的示例涉及为表创建索引。w3schools.com上的 “ gumph” 甚至试图将其解释为用户出于性能原因看不到的某种东西。它们的描述似乎将SQL索引置于非声明式阵营中,并且出于纯性能的原因,通常将它们手工添加。 是不是他们的某个地方是理想的SQL DB,它比其余所有声明性都强得多,但是因为那是一个好人却没有听说的SQL DB?

5
是什么使函数式编程语言声明式而不是命令式?
在许多描述函数式编程优势的文章中,我看到函数式编程语言(例如Haskell,ML,Scala或Clojure)被称为“声明性语言”,与命令式语言(例如C / C ++ / C#/ Java)不同。我的问题是什么使函数式编程语言具有声明性而非命令性。 一个经常遇到的描述声明式和命令式编程之间差异的解释是,在命令式编程中,您告诉计算机“如何做某事”,而不是声明性语言中的“做什么”。我在此说明中遇到的问题是,您在所有编程语言中都经常这样做。即使您进入最低级别的程序集,您仍在告诉计算机“该怎么做”,您告诉CPU将两个数字相加,但并没有指示它如何执行加法。如果我们走到另一端,像Haskell这样的高级纯函数式语言,实际上就是在告诉计算机如何完成特定任务,这就是您的程序所要执行的一系列指令,计算机无法单独实现这些任务。我了解到,Haskell,Clojure等语言显然比C / C ++ / C#/ Java高,并提供诸如惰性求值,不可变数据结构,匿名函数,currying,持久数据结构等功能,所有这些使得函数式编程是可能且高效的,但我不会将它们归类为声明性语言。 对我而言,纯声明性语言将是仅由声明完全构成的语言,此类语言的示例将是CSS(是的,我知道CSS从技术上讲不是编程语言)。CSS只包含页面的HTML和Javascript使用的样式声明。CSS除了作声明外,不能做任何其他事情,它不能创建类函数,即,基于某些参数确定要显示的样式的函数,您无法执行CSS脚本等。对于我来说,它描述了声明性语言(注意,我没有说声明性语言编程语言)。 更新: 我最近一直在使用Prolog,对我而言,Prolog是最接近完全声明式语言的编程语言(至少在我看来),如果它不是唯一的完全声明式编程语言。要详细说明Prolog中的编程,请进行声明,声明要说明事实(规则(对于特定输入返回true的谓词函数))或规则(对基于输入的给定条件/模式返回true的谓词函数),规则使用模式匹配技术定义。要在序言中做任何事情,您都可以通过用变量替换谓词的一个或多个输入来查询知识库,而序言会尝试查找谓词成功的变量的值。 我的观点是在序言中没有强制性指令,您基本上是在告诉(声明)计算机知道的信息,然后询问(查询)有关知识的信息。在函数式编程语言中,即使您不是直接操作内存位置或不逐步编写计算,也仍在给出指令,即获取值,调用函数X并为其添加1等。从这个意义上讲,我不会说用Haskell,ML,Scala或Clojure进行编程是声明性的,尽管我可能是错的。在我上面所描述的意义上,它是正确,真实,纯函数式的声明式编程。

4
尝试向命令式程序员讲解声明式编程时,有哪些好的做法?
我愿意在我的公司做一些F#的培训,他们似乎表现出了一些兴趣。他们通常是VB6和C#程序员,他们对编程的热情不高。话虽这么说,当您考虑功能问题时,我觉得编写正确的代码会更容易,因此他们一定会从中受益。 谁能提供一些有关我应该如何处理此问题的建议? 主意 不要专注于语法,而应该专注于如何使用该语言及其所推广的习语。 试想一下以命令式方式编写的示例很痛苦,但是以声明式方式编写时却转换为优雅的代码。

2
函数式编程语言是否会带来副作用?
根据Wikipedia 所说,声明性的函数式编程语言禁止副作用。通常,声明式编程会尝试最小化或消除副作用。 同样,根据维基百科,副作用与状态变化有关。因此,从某种意义上说,函数式编程语言实际上消除了副作用,因为它们不保存任何状态。 但是,此外,副作用还有另一个定义。副作用 除了返回值之外,还可以与其调用函数或外界进行交互。例如,特定函数可能会修改全局变量或静态变量,修改其参数之一,引发异常,将数据写入显示或文件,读取数据或调用其他副作用函数。 从这种意义上说,函数式编程语言实际上会带来副作用,因为有无数的函数实例影响它们的外部世界,调用其他函数,引发异常,写入文件等。 那么,最后,函数式编程语言是否允许副作用? 或者,我不明白什么是“副作用”,因此命令式语言允许它们,而声明式语言则不允许。根据以上内容以及所得到的内容,没有一种语言能够消除副作用,因此我可能遗漏了一些有关副作用的信息,或者Wikipedia定义的定义不正确。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.