问题标签 [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 投票
4 回答
4396 浏览

python - 检查一个值在 While 循环 Python 中是否仍然保持不变

我想知道是否有一种优雅的方法可以检查是否可以检查在 while 循环中不断变化的值,如果值停止变化并保持不变,则停止 while 循环。

例如:

0 投票
2 回答
361 浏览

haskell - 使用命令式编程的阶乘

我有以下代码:

我需要使用命令式编程来实现阶乘函数。我要做的是使用创建和初始化变量newIORef,使用带有readIORefand的 while 循环修改它们的值writeIORef,然后让IO操作返回由输入n和最终结果组成的对。

这是我到目前为止所做的:

这是我尝试编写阶乘函数。这显然是行不通的。任何帮助,将不胜感激。

0 投票
4 回答
910 浏览

haskell - Haskell中使用列表的不同斐波那契实现

我在博客中搜索了与我想要的类似的斐波那契实现。尽管有很多关于 Haskell 的 Fibonacci 实现的问题,但什么也没出现。

我想要一个递归斐波那契函数(速度无关紧要),在每次调用 fib 函数时将每个斐波那契数附加到一个全局列表中。我是 Haskell 的新手,来自命令式背景。这是我认为可行但没有成功的方法。

我知道 Haskell 中已经存在的斐波那契列表,但我的分配规范希望我以这种方式进行。我正在尝试将每个斐波那契数限制为用户定义的数 n 到空的全局 fibos 列表中。任何帮助或指示将不胜感激。

编辑:

我现在有一个工作函数,它返回一个包含 n 个元素的斐波那契数列表,其中 n 是用户输入,这里是代码:

我需要的是一个函数,如果用户输入 2,则打印 [0,1,1,2],如果用户输入 8 或 8 到 12 之间的任何值,则打印 [0,1,1,2,3,5,8](因为 13 是一个小数字)。

0 投票
1 回答
972 浏览

declarative - 命令式和声明式编程语言之间的区别?

我知道它们是什么:

在命令式编程语言中,您逐步告诉编译器您想要发生什么,而在声明性语言中,您编写描述结果但不一定如何实现所需结果的代码。

但是,我不知道使用任何一种编程语言的优化。除此之外 - 是否有任何并发​​症?例如,运行以任何一种语言开发的程序时需要空间/时间。

0 投票
1 回答
1508 浏览

ocaml - OCaml 中的双端队列 - 这是什么想法?

我遇到了这个双端队列的实现:

我真的不明白这个实现的主要思想是什么,主要概念是什么?你能给我解释一下吗?为什么我们使用这些记录相互递归?

0 投票
2 回答
251 浏览

scala - 观察者模式强制命令式风格

我在看 Coursera 的反应式编程课程,它使用 Scala 来实现观察者模式。在那里,Martin Odersky 说观察者模式强制执行命令式编程,我们可以看到这是因为订阅者的处理程序具有Unit类型。

他在这里说: https : //class.coursera.org/reactive-002/lecture/107 9:40

我真的不明白:

1.为什么handlers需要有Unit类型?

2.观察者模式是如何强制命令式编程的?

0 投票
0 回答
946 浏览

state - 在命令式编程中改变程序状态是什么意思?

以下命令式编程的定义是什么意思?

命令式编程是一种编程范式,它使用改变程序状态的语句。

什么是程序状态,你如何改变它?

0 投票
2 回答
871 浏览

assembly - z80 组装嵌套循环

我需要在 z80 硬件上的 Assembly 中编写三个嵌套循环。第一个循环(最内部的循环)应该迭代 70 次,另外两个 100 次。

这是我想出的代码,但似乎无法正常工作;它迭代直到产生中断(我认为是堆栈溢出错误)。

C ++中的类似代码是

0 投票
1 回答
167 浏览

reference - 为二叉树中的每个节点找到左侧最远的叶子 - 已解决 - OCaml 中的树遍历 - 左叶

我设法完成了这项任务。答案如下。也许有人会需要这个解决方案。

你在 OCaml 中有一个二叉树。每个节点都有一个 int、左孩子、右孩子和对节点的引用。

编写程序left_leaves : tree -> unit 该程序必须在每个节点中设置对其最深左子节点的引用。

对于每个节点,此过程必须在此节点中设置引用,如下所示:

如何在 Ocaml 中编写此程序?我在考虑递归。我们应该从树的底部开始。首先,我们应该更改对 Leaf 的引用。然后在下一步中,我们应该更改对左节点的引用,然后递归地将节点中的每个引用更改为其左子节点的引用。我为测试目的添加了构建 BST 树的过程:

这是我的解决方案,但它不起作用。我不知道为什么。

编辑:在这篇文章的编辑期间,我想出了如何去做。我的代码:

0 投票
2 回答
104 浏览

algorithm - 对项目进行分组而不重复逻辑

在命令式编程时,我经常发现自己编写代码来对这样的项目进行分组:

不幸的是,这段代码存在一些缺陷:

  • if curGroup is good: add curGroup to groups代码是重复的。虽然条件中的条件可以分解为一个函数,但调用该函数并将 curGroups 添加到组的逻辑仍然出现两次,并且很容易忘记第二次出现。

  • 创建新组的逻辑出现两次。这个逻辑可能是微不足道的,如果不是,那么它可以分解成一个单独的函数,但就像第一个要点一样,它表明流程不正确。

  • 第一项可能无法通过归属检查,在这种情况下,我们会在创建新组后立即创建一个新组。这个问题可能看起来微不足道,但有时需要明确阻止将初始空组添加到groups. 无论如何,它表明所需逻辑的表达不正确。

我想知道是否有一种更简洁的方式来表达这种逻辑。我为这个问题的抽象性质道歉,但这个问题出现在多种情况下。如果有必要在特定编程语言的上下文中解决这个问题,您可以假设 Java。