问题标签 [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.
python - 检查一个值在 While 循环 Python 中是否仍然保持不变
我想知道是否有一种优雅的方法可以检查是否可以检查在 while 循环中不断变化的值,如果值停止变化并保持不变,则停止 while 循环。
例如:
haskell - 使用命令式编程的阶乘
我有以下代码:
我需要使用命令式编程来实现阶乘函数。我要做的是使用创建和初始化变量newIORef
,使用带有readIORef
and的 while 循环修改它们的值writeIORef
,然后让IO
操作返回由输入n
和最终结果组成的对。
这是我到目前为止所做的:
这是我尝试编写阶乘函数。这显然是行不通的。任何帮助,将不胜感激。
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 是一个小数字)。
declarative - 命令式和声明式编程语言之间的区别?
我知道它们是什么:
在命令式编程语言中,您逐步告诉编译器您想要发生什么,而在声明性语言中,您编写描述结果但不一定如何实现所需结果的代码。
但是,我不知道使用任何一种编程语言的优化。除此之外 - 是否有任何并发症?例如,运行以任何一种语言开发的程序时需要空间/时间。
ocaml - OCaml 中的双端队列 - 这是什么想法?
我遇到了这个双端队列的实现:
我真的不明白这个实现的主要思想是什么,主要概念是什么?你能给我解释一下吗?为什么我们使用这些记录相互递归?
scala - 观察者模式强制命令式风格
我在看 Coursera 的反应式编程课程,它使用 Scala 来实现观察者模式。在那里,Martin Odersky 说观察者模式强制执行命令式编程,我们可以看到这是因为订阅者的处理程序具有Unit
类型。
他在这里说: https : //class.coursera.org/reactive-002/lecture/107 9:40
我真的不明白:
1.为什么handlers需要有Unit
类型?
2.观察者模式是如何强制命令式编程的?
state - 在命令式编程中改变程序状态是什么意思?
以下命令式编程的定义是什么意思?
命令式编程是一种编程范式,它使用改变程序状态的语句。
什么是程序状态,你如何改变它?
assembly - z80 组装嵌套循环
我需要在 z80 硬件上的 Assembly 中编写三个嵌套循环。第一个循环(最内部的循环)应该迭代 70 次,另外两个 100 次。
这是我想出的代码,但似乎无法正常工作;它迭代直到产生中断(我认为是堆栈溢出错误)。
C ++中的类似代码是
reference - 为二叉树中的每个节点找到左侧最远的叶子 - 已解决 - OCaml 中的树遍历 - 左叶
我设法完成了这项任务。答案如下。也许有人会需要这个解决方案。
你在 OCaml 中有一个二叉树。每个节点都有一个 int、左孩子、右孩子和对节点的引用。
编写程序left_leaves : tree -> unit
该程序必须在每个节点中设置对其最深左子节点的引用。
对于每个节点,此过程必须在此节点中设置引用,如下所示:
如何在 Ocaml 中编写此程序?我在考虑递归。我们应该从树的底部开始。首先,我们应该更改对 Leaf 的引用。然后在下一步中,我们应该更改对左节点的引用,然后递归地将节点中的每个引用更改为其左子节点的引用。我为测试目的添加了构建 BST 树的过程:
这是我的解决方案,但它不起作用。我不知道为什么。
编辑:在这篇文章的编辑期间,我想出了如何去做。我的代码:
algorithm - 对项目进行分组而不重复逻辑
在命令式编程时,我经常发现自己编写代码来对这样的项目进行分组:
不幸的是,这段代码存在一些缺陷:
if curGroup is good: add curGroup to groups
代码是重复的。虽然条件中的条件可以分解为一个函数,但调用该函数并将 curGroups 添加到组的逻辑仍然出现两次,并且很容易忘记第二次出现。创建新组的逻辑出现两次。这个逻辑可能是微不足道的,如果不是,那么它可以分解成一个单独的函数,但就像第一个要点一样,它表明流程不正确。
第一项可能无法通过归属检查,在这种情况下,我们会在创建新组后立即创建一个新组。这个问题可能看起来微不足道,但有时需要明确阻止将初始空组添加到
groups
. 无论如何,它表明所需逻辑的表达不正确。
我想知道是否有一种更简洁的方式来表达这种逻辑。我为这个问题的抽象性质道歉,但这个问题出现在多种情况下。如果有必要在特定编程语言的上下文中解决这个问题,您可以假设 Java。