问题标签 [imperative-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
34 浏览

terminology - 什么(准确地说)是命令?

以下哪一项最恰当地称为“命令”,另一项应该称为什么?

  1. changeDirectoryTo
  2. changeDirectoryTo /home/peter
0 投票
3 回答
10226 浏览

python - Python 编程函数式与命令式代码

所以我目前正在上课学习 3 种主要的编程范式。我知道python同时使用函数式和命令式范式。在明天的考试之前,我一直在寻找每个范例的 Python 中的简短示例代码,以便更好地理解这一点。谢谢!

0 投票
5 回答
12016 浏览

c - C是命令式还是声明式编程语言

知道命令式编程和声明式编程之间的区别是非常令人困惑的,任何人都可以用现实世界的术语来解释两者之间的区别吗?

请澄清 C 是命令式语言还是声明式语言?

0 投票
0 回答
246 浏览

ruby - Ruby 中的函数式编程风格与性能

我喜欢函数式编程,我也喜欢 Ruby。如果我可以用函数式而不是命令式来编写算法,我就会这样做。我倾向于尽可能不更新或重用变量,避免使用“砰!” 方法并使用“map”、“reduce”和类似的函数来代替“each”或危险循环等。基本上我尽量遵循这篇文章的规则。

问题是通常函数式解决方案比命令式解决方案慢得多。在这篇文章中,有一些清晰而可怕的例子,在某些情况下会慢 15-20 倍。在阅读并做了一些基准测试之后,我害怕继续使用函数式风格,至少在 Ruby 中是这样。

另一方面,我觉得用函数式风格编写代码更舒服,因为它聪明、干净、错误更少,而且我认为更“正确”,特别是现在我们可以使用并发和并行来获得更好的性能。

所以我很困惑在 Ruby 中使用哪种风格。任何明智的建议将不胜感激。

0 投票
1 回答
71 浏览

regex - 对于给定的语法,提供 3 个有效的示例字符串

今天我在“编程语言”课上做了作业,但遇到了麻烦。这是完整的问题;

对于下面给出的语法,画出转移图和转移表。提供 3 个有效的示例字符串。

这就是我遇到的麻烦;

1?1.(0|1)+

我真的不知道这个例子中的问号 (?) 代表什么,而且我找不到在线论文。我不需要任何关于图表或表格的帮助,如果我知道“?”,我可以制作它们。方法。请帮我解决这个问题,在此先感谢。

0 投票
1 回答
917 浏览

c# - 功能反应式编程(FRP)可以在命令式语言中进行任何程度的模拟吗?

我知道,并非函数式响应式编程 (FRP) 的每个组件都可以在大多数命令式语言中实现,这完全取决于语言的设计方式。

但是,是否可以使用 C# 中的事件来实现类似的效果,其中某些输入值的更改会级联以更新各种对象?还是我已经回答了我的问题,除了“观察者”模式的变体之外,真的没有什么可以做的了?除了 C#(我只是出于熟悉而在此提及)之外的其他命令式语言呢?

0 投票
2 回答
574 浏览

memory - 功能性语言会浪费记忆吗?

总的来说,我想问,

  • 如果一个问题可以通过命令式语言方式和函数式语言方式来解决,那么与命令式语言相比,函数式语言会浪费内存,至少不会节省内存,因为,函数式语言大量依赖递归,递归会推动大量内存堆栈

  • 然后是上面的问题,从内存优化的角度来看,如果一项工作可以用命令式语言完成,它不应该(至少不会比)使用函数式语言?


上面的问题,其实来自一个算法问题:

在不使用额外空间的情况下保留堆栈:

上面的问题可以通过使用双递归来解决,在我看来,即使它没有在代码中使用额外的内存,它实际上“隐藏”了堆栈中的那些额外空间。


当然,我的问题更笼统,您不必专注于上述特定问题。

感谢您细心的建议!

0 投票
2 回答
122 浏览

functional-programming - 你如何迭代函数式语言?

让我远离像 Lisp 这样的函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我在 C 中有一个数组,它代表屏幕像素的 RGB 值。使用 C 中的 for 循环更改颜色是微不足道的,但是如何在 Lisp 中优雅地做到这一点?

编辑:

对不起,我没有正确表达我的问题。在 C 中,当我想改变屏幕上的颜色时,我只需在数组的一部分上编写一个 for 循环。但在 scheme、clojure 或 haskell 中,所有数据都是不可变的。所以当我改变矩阵的一部分时,它会返回一个全新的矩阵。这有点尴尬。是否有一种“干净”的方法来更改矩阵的一部分的颜色,而无需递归整个数组并制作副本?

0 投票
1 回答
607 浏览

algorithm - 在函数范式中实现 Karger 的最小割算法

我用任何命令式语言实现这个算法都没有问题,但我正在努力用 Clojure 或任何其他函数式语言实现它。许多算法都是根据使用可变数据结构和命令式循环来描述的,我很难将所有这些都转换为功能域。

这是我在 Clojure 中使用邻接列表作为图形表示来实现它的不完整尝试(草稿,而不是工作实现):

谁能给我这个算法的参考实现(最好用 Clojure 编写)?另外,如果有人给我一个一般性建议,将命令式术语描述的算法转换为功能域,我也想知道。

提前致谢!

更新#1

这是用 Python 编写的算法实现的链接:http: //pastebin.com/WwWCtxpu

0 投票
4 回答
1420 浏览

scala - 为什么命令式语言没有模式匹配?

因此,函数式语言中的模式匹配非常棒。我想知道为什么大多数命令式语言都没有实现这个功能?据我了解,Scala 是唯一具有模式匹配的“主流”命令式语言。案例/开关结构的功能就没有那么强大了。

我特别感兴趣的是,模式匹配的缺失是技术原因还是历史原因?