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

reference - 如何在 OCaml 中声明对空堆栈的引用?

也许我在这里很愚蠢,所以我想问的更普遍的问题是如何在 OCaml 中声明对某个类型的空值的引用。通常我声明对自定义定义的空值的引用,例如,如果我有一个类型type point = Point of (int * int),我会声明这样的引用let a = ref (Point (0,0))。然而,这并不令人满意,因为我必须自己“想出”一个空值。此外,如果您查看标准库中的参考“堆栈”模块(http://caml.inria.fr/pub /docs/manual-ocaml/libref/Stack.html ),里面没有空值,这个怎么处理?

0 投票
3 回答
543 浏览

rust - 打印树 - 尝试访问字段,但未找到具有该名称的字段

我正在尝试编写我的第一个 Rust 程序。我想在屏幕上打印一棵简单的树,但我无法访问value属性,它说

错误 1 ​​尝试访问valuetype 上的字段Node,但找不到具有该名称的字段 c:\users\zhukovskiy\documents\visual studio 2013\Projects\rust_application1\rust_application1\src\main.rs 21 20 rust_application1

0 投票
4 回答
982 浏览

loops - OCaml 中退出循环的惯用异常

在 OCaml 中,可以通过引发异常提前退出命令式循环。

虽然在 OCaml 中使用命令式循环本身并不是惯用的,但我想知道用早期退出来模拟命令式循环的最惯用方法是什么(如果可能的话,考虑到性能等方面)。

例如,一个旧的 OCaml 常见问题解答提到异常Exit

Exit: 用于跳出循环或函数。

它仍然是最新的吗?标准库只是将其作为通用异常提及:

任何库Exit函数都不会引发异常。它是为在您的程序中使用而提供的。

相关地,this answer to another question提到使用预先计算的let exit = Exit异常来避免循环内的分配。还需要吗?

此外,有时人们想以特定值退出循环,例如raise (Leave 42). 是否有惯用的例外或命名约定来执行此操作?在这种情况下我应该使用引用(例如let res = ref -1 in ... <loop body> ... res := 42; raise Exit)吗?

最后,使用Exitin 嵌套循环可以防止某些情况下想要退出多个循环,例如break <label>在 Java 中。这将需要定义具有不同名称的异常,或者至少使用一个整数来指示应该退出多少范围(例如Leave 2,指示应该退出 2 个级别)。同样,这里是否有一种惯用的方法/异常命名?

0 投票
3 回答
450 浏览

oop - 面向对象编程与函数式编程兼容吗?

我从小就被教 java,在过去的几年里,我开始使用流行的开源 CMS 学习很多 PHP。我真的很喜欢 OOP 的自然感觉,但我最近发现了函数式编程的概念,这似乎是一种困难但优雅的做事方式。

rtperson对“什么是函数式、声明式和命令式编程?[关闭] ”这个问题的精彩回答中,他说“然后是面向对象的编程,这实际上只是一种在命令式程序中组织数据的新方法。 "

我想我明白他的意思,但这是真的吗?OOP 可以与函数式编程共存吗?

0 投票
1 回答
408 浏览

parsing - 命令式语言的抽象语法树

我正在寻找一种可用于常见命令式语言(Java、C、python、ruby 等)的抽象语法树表示。我希望它尽可能接近源代码(而不是像 LLVM 这样的东西)。我在网上找到了Rose,但它只能处理 C 和 Fortran。这存在吗?

0 投票
2 回答
687 浏览

java - Java中命令式和函数式方法的比较

我有一个方法可以从给定列表中打印一个人的姓名(如果它具有指定的年龄)。此方法是使用命令式然后是函数式方法来实现的。

功能方法:

问题是,除了可读性之外,我们还能如何比较这两种方法,以及对每个属性的评估是什么。例如,哪一个具有更高的内存占用,哪一个引入的开销最小,或者具有更高的响应时间。可以讨论哪些其他属性(即非功能性需求)?

0 投票
3 回答
981 浏览

reactjs - 如何管理 UI 反馈?

是否存在用于管理用户与各个组件的交互的既定模式,例如显示加载器微调器、在表单保存/加载时禁用输入字段等?

我发现自己在商店中执行以下操作,以使组件在某种程度上与任何隐含状态脱钩:

基本上,我只是触发一个事件,表示某个动作即将发生,然后我执行该动作(进行 API 调用等),然后在该动作完成时发出另一个事件。

在组件内部,我可以只订阅一个WILL_<action>事件,渲染所有微调器等,然后在DID_<action>触发时清除屏幕。虽然这似乎可行,但它确实感觉非常样板和重复,以及超级混乱(太多的状态只存在于根据动作的位置(在WILL_<action>和 * DID_<action>.

0 投票
3 回答
412 浏览

scala - 理解函数式编程

我希望我正确地考虑我的问题。

据我了解,命令式编程(简而言之)是基于变异、控制结构(如循环和分配)。

当我学习有关函数式编程的课程时,他们提到了一点。我想深入了解它..

重点是:

如果我们想按照他们的数学理论来实现高级概念,就没有变异的地方。

我从中了解到的是,分配给特定变量的值/系数应该相同,并且不能不时重新分配以从中创建抽象定义。这是对的吗 ?

可以多加点吗?

0 投票
4 回答
677 浏览

haskell - 具有不同类型短路的状态计算(Maybe,Either)

我试图找到将以下有状态命令式代码转换为纯函数表示的最优雅的方法(最好在 Haskell 中使用其 Monad 实现提供的抽象)。但是,我还不擅长使用变压器等组合不同的单子。在我看来,分析他人对此类任务的看法对自己学习如何做最有帮助。命令式代码:

get返回时Nothing,我们需要继续执行put2,当get返回时,Just x我们希望只有在失败时才x被传递给put1并短路,put1否则循环。基本上put1,并且put2可能会终止整个事情或转移到以下语句以某种方式改变底层状态。get可以成功并调用put1并循环,也可以失败并继续put2

我的想法是:

而我为什么要寻找这样的东西是因为只要没有任何东西可以返回或终止,就(get >>= put1)可以简单地短路。同样终止外循环。但是,我不确定如何将其与必要的和/或实现这一目标相结合。getput1put2StateMaybeEither

我认为使用转换器来组合State其他单子是必要的,因此代码很可能不会那么简洁。但我想它也可能不会更糟。

欢迎任何关于如何优雅地实现翻译的建议。这与“具有不同类型中断的有状态循环if”不同,它避免使用,的显式控制流whenwhile而是试图鼓励使用Maybe,Either或其他一些方便的>>=语义。此外,总有一种直接的方法可以将代码转换为功能代码,但它很难被认为是优雅的。

0 投票
7 回答
435 浏览

java - 将命令式 Java 转换为函数式 Java(游戏)

我正在学习更多关于 Java 8 及其功能的知识,我想用它做更多的练习。例如,我有以下命令式代码,用于在屏幕边界周围环绕一个圆圈:

  1. 我怎么能尝试“功能化”它?也许是一些伪代码?在我看来,可变性和状态似乎在这个例子中是固有的。
  2. 函数式编程不适合游戏开发吗?我喜欢两者,所以我试图将它们结合起来。