问题标签 [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 回答
26 浏览

design-patterns - 将函数转换为表格查找是什么意思?

这段名为Don't fear the monad 的视频中,在05:0206:05之间,Brian Beckman 说:

每个命令式程序员都会经历这个阶段,学习可以用查找表来替换函数。通常,您这样做是为了提高性能。你想制作sin函数或cosine 函数,只需制作一个表格并在该表格中进行插值......每个人都学会了这个技巧。

我想知道他所说的这个技巧是什么意思,以及它如何提高性能。你能详细说明一下吗?

它只是意味着有某种外观Dictionary<TKey, Func<TInput, TReturn>>吗?

0 投票
2 回答
66 浏览

c - C 和加法,整数先和后

我来自 Java,我想提高我的编码技能和深入了解它的工作原理,我认为最好的语言是 C 语言。我对它的工作原理感到非常兴奋,但现在请向我提出疑问。为什么在 C 中第一个代码不起作用而第二个是?

Ps:我会跳过几个步骤来加快代码速度并专注于问题。我正在学习C99。

结果将是-1234567 ecc ..

使用这段代码会很好用,这就是命令式编程的意思吗?

抱歉英语不好不是我的第一语言,我也会改进:°D

0 投票
0 回答
203 浏览

scala - 命令式与函数式数据结构的权衡

同一事物的这两个示例之间是否有一些权衡?

我的偏见是始终使用函数式样式,但是如果我运行数十亿个这样foldLeft的 s,是否为每个列表中的每一步创建一个新FunctionalA的比仅更新 a 效率低var

一个通用的值集合:

命令式折叠:

折叠功能:

0 投票
2 回答
87 浏览

conditional - 可能的 OCaml 代码生成错误

以下自包含代码突出显示了 OCaml 中的一个问题,可能与代码生成有关。数组 x 具有 [0..9] 中节点的连接信息。函数 init_graph 最初为每个节点构造了传入节点的显式数组。下面显示的简化版本仅打印两个连接的节点。

函数 init_graph2 与 init_graph 相同,除了一个“无用”的 else 分支。但是这两个函数产生的输出是完全不同的。您可以运行它并看到 init_graph 在某些情况下跳过了第二个 if-then-else!

我们已经在版本 3.12.1(适当替换了 make_matrix)、4.03.0 和 4.03.0+flambda 上运行了这个程序。他们都有同样的问题。

我一直在处理 OCaml 神秘地跳过分支或在某些情况下同时占用两个分支的这个问题和相关问题。感谢一位合作者,我们能够将真实代码缩减为一个小的自包含示例。

关于这里发生了什么的任何想法?有没有办法避免这个和相关的问题?

更新: Ocamllint 将 init_graph2 中的 else 分支标记为“无用”,这显然是错误的。

其次,camlspotter 建议的缩进方法在这种情况下可能会产生误导。我们遵循 Ocamllint 的建议并注释掉 else 分支。带有 taureg-mode 的 Emacs 不会重新缩进这段代码,除非明确要求我们相信一切都很好。

所需要的是一种类似 lint 的工具,可以在这些情况下发出警告。我正在等待这个的好建议。

谢谢。

0 投票
3 回答
438 浏览

java - 为什么函数式编程语言支持自动记忆而不是命令式语言?

这是我在网上随机找到的一些关于动态编程的讲座中读到的一个问题。(我毕业了,我已经知道动态规划的基础了)

在解释为什么需要记忆的部分,即

如果不使用 memoization,那么许多子问题将被重新计算很多次,这使得复杂度非常高。


然后在一页上,笔记有一个没有答案的问题,这正是我想问的。在这里,我使用了确切的措辞和它显示的示例:

自动记忆:许多函数式编程语言(例如 Lisp)都内置了对记忆的支持。

为什么不用命令式语言(例如 Java)?

注释提供的 LISP 示例(它声称它是有效的):

它提供的 Java 示例(它声称它是指数级的)


在阅读本文之前,我什至不知道某些编程语言中内置了对记忆的支持。

注释中的说法是否属实?如果是,那么为什么命令式语言不支持它?

0 投票
1 回答
266 浏览

c++ - 更好的可读性和简单性与更高的编程复杂性和速度,选择什么?

在大学解决我的信息学作业时,我总是找到不同的方法来解决同一个问题。一种方法是最快的(执行时间)但最长且更复杂。另一个是更容易实现,执行时间短,易于理解等。

举个小例子,我们必须用 C++ 创建一个程序,它输出一行 N 个元素,其中每个元素具有相同的相邻元素,但中间的元素不同。

第一个解决方案是最简单的:

第二个实现起来有点困难,但执行起来更快(条件检查更少):

我的问题是我应该关注什么?干净的代码,易于实现/部署和更好的可读性或最佳算法,更快的执行和强大的逻辑,或者尽可能地尝试混合所有这两种,因为这两种解决问题的方法之间总是存在差异?

0 投票
2 回答
223 浏览

functional-programming - SICP - 阶乘的命令式与函数式实现

我正在与 Racket 和 Dr. Racket 一起研究 SICP 书。我也在看以下讲座:

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/5a-assignment-状态和副作用/

在第 3 章,作者介绍了命令式编程的概念。

为了说明含义,他们将使用函数式编程的阶乘过程的实现与使用命令式编程的实现进行了对比。

下面你有一个使用函数式编程的迭代过程的递归定义:

在教授要介绍一个命令式实现之前,我尝试了自己。

我使用命令“set!”到达了这段代码:

但是,教授的实现与我的命令式实现完全不同:

两个代码,我的实现和教授的代码,都达到了相同的结果。但我不确定它们是否具有相同的性质。

因此,我开始问自己:我的实施真的势在必行吗?只需使用“设置!” 保证?

我仍然在我的辅助迭代过程中使用参数,而教授的辅助迭代函数根本没有任何参数。这是回答我问题的核心吗?

谢谢!所以用户一直在帮助我很多!

0 投票
1 回答
98 浏览

javascript - 不可变状态是 ReactJs 中的一个功能特性?

命令式程序最重要的特征是状态及其修改。

ReactJs 鼓励尽可能多的函数式编程(例如使用纯度、高阶函数)。我想知道在 ReactJs 中使用不可变状态这个特性是否仍然是一个命令特性,或者可以被认为是功能性的“状态样式”?

从理论上讲,React 状态和纯命令式程序中的状态有什么区别?

0 投票
1 回答
55 浏览

multithreading - 数据竞争是命令式编程固有的,还是并行计算的障碍?

老实说,我不研究这个计算领域。实际上,我的参考资料是一些网络和学术文章,然后我不安全,但对并行计算的一些概念感到好奇。

我已经制定了两个句子,并想验证它。


第一:

命令式语言使用变量来抽象计算机的硬件内存。如果有两个并行线程并且至少有一个执行写入,而没有同步机制,则会发生数据竞争

我们可以认为数据竞争是命令式编程范式所固有的吗?


第二个:

数据竞争会产生意想不到的结果。由于数据竞争发生在多个并行线程中,因此它们是多线程能力的问题。

我们可以认为数据竞争不仅是多线程的障碍,而且是一般并行计算的障碍?


我真正的目标是写一些与命令式编程和并行处理相关的文本来解释函数式编程的好处。欢迎任何更正和进一步的信息。

0 投票
0 回答
230 浏览

python - 纯命令式编程可以合并函数吗

正如问题所暗示的那样,如果一个程序应该以纯粹的命令式风格编写(即使编程语言是一种混合语言,如 PHP 或 Python,它支持 OOP 等其他范式),那么该程序是否应该与内置的语言函数(如 PHP 的explode();函数)配合使用? 或者,程序是否不再纯粹是命令式的?

为了在这里提供一些背景信息,我被要求创建一个纯粹的命令式程序。我可以自由支配这门语言,我可能会选择 Python。我是否通过使用内置语言函数打破了命令式范式的规则?

谢谢