问题标签 [imperative]
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.
variables - 如果我来自命令式编程背景,我该如何理解没有动态变量来跟踪 Haskell 中的事物的想法?
所以我正在尝试自学 Haskell。我目前正在学习 Haskell for Great Good的第 11 章,并且正在做99 个 Haskell 问题以及Project Euler 问题。
事情进展顺利,但每当我需要跟踪“变量”时,我发现自己一直在做一些事情。我只是创建了另一个函数,它接受这些“变量”作为参数,并根据情况递归地为其提供不同的值。举个例子,这是我对欧拉计划问题 7 的解决方案,找到第 10001 个素数:
我想你应该已经明白了。让我们也忽略这个解决方案可以提高效率的事实,我知道这一点。
所以我的问题是一个两部分的问题。首先,我对 Haskell 的看法都错了吗?我是否停留在命令式编程思维中,没有像我应该的那样拥抱 Haskell?如果是这样,我觉得我是,如何避免这种情况?有没有一本书或资料可以帮助我思考更多类似 Haskell 的想法?
非常感谢您的帮助,
-阿萨夫
clojure - 解决实际问题的命令式与函数式解决方案的好例子
我正在为几周后开始的课程编写一些课程材料。我选择 Clojure 作为学生学习的新语言。我想用一章来将命令式代码重构为函数式代码。为此,我想要一组不牵强附会的实际问题,通过这些问题我可以展示命令式和函数式解决方案的比较。这些问题最好不要像 Euler 项目那样强调数学,而是普通程序员需要定期处理的问题。谁有这方面的好资料?
部分答案:一个这样的来源是http://langref.org/。更想要!
recursion - 埃拉托色尼筛法
我一直在网上搜索埃拉托色尼筛法的实施方案,虽然我想出了很多内容,但似乎没有一个能像我需要的那样完成。
问题是大多数算法要么使用静态结束,要么使用迭代。这与我缺乏语言知识相结合,导致我向你们所有人寻求帮助。
我需要一个 Sieve 的实现,它接受一个参数(直到 Sieve 的数字),只使用递归,并且有一个带有#t
(真)或#f
(假)的数字的“缺点”列表。
所以基本上算法会这样:
- 从 2 个输入的数字创建列表,每个数字都以 true 开头
- 递归遍历并标记每个可被 2 整除的数字 false
- 然后继续到列表中的下一个“真”数字,直到只有素数被标记为真
- 输出列表
示例输出:
> (erat-sieve 20)
((2 . #t) (3 . #t) (4 . #f) (5 . #t) (6 . #f) (7 . #t) (8 . #f) (9 . #f) ( 10 . #f) (11 . #t) (12 . #f) (13 . #t) (14 . #f) (15 . #f) (16 . #f) (17 . #t) (18 . #f) (19 . #t) (20 . #f))
如果您还可以有评论彻底解释代码,那将非常感激。
谢谢!
已修改 :::所以我学到了一些方案来进一步解释我的问题......
这使得列表。
这将返回一个列表,其中每个除数的倍数都标记为 false。
现在这是我遇到问题的功能,它似乎应该可以工作,我已经手动完成了 3 次,但我无法弄清楚为什么它没有返回我需要的东西。
正如函数名称所暗示的那样,我要做的是,为列表中仍然标记为真的每个数字调用 mark-off-multiples。所以你传入,((3.#t)(4.#t)(5.#t))
然后它调用mark-off-multiples
2 并返回(3.#t)(4.#f)(5.#t)
并附(2.#t)
加到它。然后它再次调用自己传入(3.#t)(4.#f)(5.#t)
并调用 mark-off-multiples 并返回列表的cdr(4.#f)(5.#t)
并继续沿着列表向下...
然后我返回的输出是一个包含所有真值的列表。
这一点,希望能帮助你更好地理解我的困境。
f# - 需要将 F# 命令式代码转换为函数式的想法
我有一个以命令式风格编写的函数女巫,无法弄清楚如何将其转换为更强大的函数式方法。
该函数接受一个字符串序列并返回一个元组序列,其中每个元组由输入中的 2,7,12,.. 和 5,10,15,.. 项组成。
例子:
输入 = { “Lorem”、“ipsum”、“dolor”、“set”、“amet”、“consectetuer”、“adipiscing”、“elit”、“Aenean”、“commodo”、“ligula”、“eget” , "dolor", "Aenean", "massa" }
输出 = { ("ipsum", "amet"), ("adipiscing", "commodo"), ("eget", "massa") }
感谢您对起点的任何帮助或提示。
asp.net - ASP.Net 以编程方式设置 Membership.Provider
我想知道是否可以通过代码而不是通过配置文件来设置默认的成员资格提供程序(Membership.Provider)。
assembly - 无限精度整数的实现
问题:“大整数表示为(小)整数列表。”
假设有:
这组定义用于定义像汇编这样的语言,使用寄存器、指令和标签(用于跳转)
现在我需要实现一个从命令式语言(具有“while”“if”等指令)到 ASM 的编译器
我的老师建议的实现是使用一个列表,其中每个元素都是给定数字的数字(数字只能是整数),例如 11000 是 [1, 1, 0, 0, 0]
第一个差距是:考虑到通用的 O'Caml 程序,我该如何实现呢?假设我必须插入一个大整数,我可以使用什么逻辑来允许“计算”?因为最后一个ASM程序也可以做add、sub mul等可以包含大整数的指令,所以不知道怎么处理寄存器、大整数和指令
我需要的是如何实现大整数的一般方案,可能用 O'Caml 语言,以及如何考虑类似于汇编的语言(在本例中为 ASM)来实现这一点
提前感谢,如果不清楚,对不起我的英语,如果有人可以帮助我,如果需要,我会提供更多细节
performance - 与haskell中“命令式”算法相关的性能
我在 lisp 语言家族中接受过一些培训,现在我正在学习一些 Haskell,以实现我自己的利益。在 lisp 中,函数式风格是可以的,但在少数情况下,命令式风格对于获得良好的性能是必要的,例如
附加
Append 很慢,因为它必须复制它的第一个参数(有时 x100 与成功摆脱它的版本一样慢)。一种补救方法是将第一个列表的最后一个指针移动到第二个列表的开头,而不是追加。当然,这是一种破坏性的操作。
种类
快速排序的功能版本创建了许多中间列表,这在某种程度上违背了算法的目的,即尽可能快。AFAIR,在 common lisp 中,sort 是唯一没有函数版本的破坏性函数。
长度
这在 lisp 中是一项代价高昂的操作,因为必须遍历整个列表才能获得其长度。不必如此,afaik clojure 以对数时间计算列表的长度。解决方案通常是在命令式循环中动态计算长度。
我的问题是,我们如何在 haskell 中处理这些问题?
haskell - 编写一个 Haskell 程序,用于对用命令式编程语言编写的程序进行类型检查
我正在尝试在 Haskell 中编写一个程序来键入用命令式编程语言编写的检查程序。
这是抽象语法:
-- 程序是一系列(列表)变量声明和一系列(列表)语句。
-- 变量声明是一个类型和一个变量名
-- 类型是“int”或“bool”,或“int[]..[]”或“bool[]..[]”
——一个陈述要么是……
-- 表达式是...
我不需要任何人来完全回答我的问题,但我想提供到目前为止我所拥有的,如果有人能指出我正确的方向或者让我知道我是否完全错误地做这件事,那将非常有帮助.
对程序进行类型检查的功能从类型检查开始。typecheck 使用 typecheckstmt 对第一条语句进行类型检查,并使用 typecheckstmtlist 对程序的其余部分进行类型检查。然后,这些函数使用 typecheckexp 对任何表达式进行类型检查。显然,我有一个非常基本的实现框架。我只想知道我是否朝着正确的方向前进,以及是否有人有任何指示。
我对需要检查的内容也有点模糊。显然,如果您正在分配和比较变量/表达式,您希望它们是相同的类型。
任何帮助将非常感激。
haskell - 编写用于计算命令式编程语言的指称语义的 haskell 程序
我正在尝试在 Haskell 中编写一个程序来计算具有整数变量、一维(整数)数组和函数的命令式语言程序的指称语义。我开始使用的功能是以下类型:
其中状态如下:
第一部分是整数变量的值,而第二部分是特定索引处的数组变量的值。
该计划将具有以下品质:
progsem 将在程序执行后返回结果状态
函数有两个参数列表,一个用于整数变量,一个用于数组变量。
函数按值调用结果
下面是命令式语言的抽象语法:
现在,我没有具体的问题,但我想知道是否有人可以为我指出如何编写语义的正确方向。
在过去,我为没有数组和函数的命令式编程语言做过类似的事情。它看起来像这样:
州属于那种类型
就像我说的那样,我不需要深入的答案,但任何帮助/提示/指针将不胜感激。
haskell - 对象之间的关系
几个星期以来,我一直在思考对象之间的关系——尤其是 OOP 的对象。例如在C++中,我们习惯于通过在需要访问另一个对象的结构中分层指针或指针容器来表示。如果一个对象A
需要访问,在B
中找到一个并不少见。B *pB
A
但我不再是C++程序员,我使用函数式语言编写程序,尤其是在Haskell中,这是一种纯函数式语言。可以使用指针、引用或类似的东西,但我对此感到很奇怪,比如“以非 Haskell 方式进行操作”。
然后我对所有这些关系的东西进行了更深入的思考,并得出了结论:
“为什么我们还要用分层来表示这种关系?
我读到一些人已经考虑过(这里)。在我看来,通过显式图形表示关系要好得多,因为它使我们能够专注于我们类型的核心,然后通过组合器表达关系(有点像 SQL 所做的)。
我所说的核心是指当我们定义时,A
我们期望定义什么A
是由什么组成的,而不是它依赖什么。例如,在电子游戏中,如果我们有一个类型Character
,那么谈论它是合法的Trait
,Skill
或者诸如此类的东西,但是如果我们谈论Weapon
或者是Items
吗?我不再那么确定了。然后:
对我来说,在设计方面听起来确实是错误的。我宁愿喜欢这样的东西:
此外,当有一天要添加新功能时,我们可以创建新类型、新图表和链接。在第一个设计中,我们必须打破Character
类型,或者使用某种变通方法来扩展它。
你怎么看这个想法?您认为在纯函数式语言Haskell中处理此类问题的最佳方法是什么?