问题标签 [purely-functional]

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 回答
4830 浏览

haskell - 为什么捕获异常是非纯的,但抛出异常是纯的?

在 Haskell 中,您可以从纯函数代码中抛出异常,但您只能在 IO 代码中捕获。

  • 为什么?
  • 你能在其他情况下捕捉还是只捕捉 IO monad?
  • 其他纯函数式语言如何处理它?
0 投票
1 回答
166 浏览

functional-programming - 如何以函数式编程风格实现这种深拷贝?

给定以下结构:

深拷贝操作可以定义为:

我的问题是如何以函数式编程风格设计一个函数,copy(Node n, Map isom)使其不会改变参数。isom

0 投票
2 回答
1037 浏览

c++ - 定义带有 void* 参数的纯虚函数的抽象基类。派生类匹配参数是指向某种类型的指针

我正在使用的修订后的实际基类和派生类加上实例化它的函数并使用非虚函数调用

着色器类.h

着色器类.cpp

LightMapShaderClass.h

LightMapShaderClass.cpp

使用基类的函数

0 投票
5 回答
784 浏览

functional-programming - 在纯函数式语言中,数据(字符串、整数、浮点数..)也只是函数吗?

我在考虑像 Ruby 这样的纯面向对象语言,其中包括数字、int、浮点数和字符串在内的所有内容本身都是对象。这与纯函数式语言相同吗?例如,在 Haskell 中,数字和字符串也是函数吗?

我知道 Haskell 是基于 lambda 演算的,它将所有内容(包括数据和操作)都表示为函数。在我看来,“纯函数式语言”将一切建模为函数,并保持函数最总是返回具有相同输入且没有状态的相同输出的定义,这似乎是合乎逻辑的。

0 投票
2 回答
8563 浏览

logging - 从函数式编程范式中记录

我更喜欢尽可能地坚持功能范式,当我的大脑准备好迎接挑战时,我会尽可能接近纯粹的功能范式。我尽可能使用 F#。通常,我会使用 VB.NET 或 C#(或 VBA,当我真的很不走运时)。所以我的语言让我远离了函数式方法。

从历史上看,在我得到结果之前,我一直忽略记录和与用户的沟通——让用户等待。现在我正在尝试实现状态栏的日志记录和/或更新。这很容易,因为我的语言允许我随时写入标准输出。但从纯粹的功能角度来看,如何将有关功能内部发生的信息泄露给外部世界?在计算过程中记录或与用户通信是否与纯粹的功能方法相反?

我确信在 Haskell 中会使用 Monad。使用其他语言时怎么办?

谢谢。

0 投票
1 回答
148 浏览

c++ - C++ 编译时检查副作用

一些编译器支持pure 和 const,但是有没有提供检查这些断言是否成立的提议?例如:

0 投票
1 回答
298 浏览

functional-programming - 函数式编程类似于自修改代码吗?

似乎有时函数式程序中的代码接受其他代码(函数)作为参数并对其进行修改并将其返回以供执行。它似乎类似于自修改代码。这是否意味着函数式程序的紧凑性与允许极其紧凑的自修改程序的原因相同?

0 投票
4 回答
284 浏览

methods - 改变全局状态的方法的技术术语?

对改变全局状态的方法有标准的技术术语吗?


  • unpure ”过于严格,因为 unpure 方法println("I don't consider stdout to be part of the global state")date()不会修改全局状态。
  • Mutator method ”很接近,但通常是“setter”的同义词,因此可能只改变一个变量,或者只改变一个局部变量而不改变全局状态。
  • const 方法” 似乎只用于 C++ 并且暗示了一些过于严格的技术细节(例如,该方法可能不会调用任何非 const 方法)。
  • 变异方法”对我来说听起来不错,但似乎只是在目标 c 中使用的一个术语。

更新:全局状态是指对其他方法或同一方法的其他调用可见的内存。

由于程序的任何方法都无法读取 stdout,println("I don't consider stdout to be part of the global state")因此具有打印的副作用,但不会更改全局状态。

0 投票
1 回答
903 浏览

string - 如何在 Haskell FFI to C++ 中编写纯字符串到字符串函数

我想通过 Haskell FFI 在 C++ 中实现一个函数,它的(最终)类型应该是 String -> String. 说,是否可以使用完全相同的签名在 C++ 中重新实现以下函数?

特别是,我想避免在返回类型中包含 IO,因为在逻辑上没有必要为这个简单任务引入杂质(我的意思是 IO monad)。到目前为止,我看到的所有涉及 C 字符串的示例都涉及返回 IO 某物或 Ptr ,它们无法转换回纯String.

我想这样做的原因是我的印象是编组与 FFI 混淆。也许如果我可以修复上面最简单的情况(除了原始类型,如 int),那么我可以在 C++ 端进行任何我想要的数据解析,这应该很容易。

与我想要在编组到/从字符串之间进行的计算相比,解析的成本可以忽略不计。

提前致谢。

0 投票
1 回答
174 浏览

f# - 正确处理 WebExceptions?

我有以下从 Internet 检索网页的 F# 程序:

如果URI 有效并且机器具有 Internet 连接并且Web 服务器正确响应等,则此方法工作正常。在理想的函数式编程世界中,函数的结果将不依赖于未作为参数传递的外部变量(副作用)。

我想知道的是什么是合适的 F# 设计模式来处理可能需要函数来处理可恢复的外部错误的操作。例如,如果网站出现故障,可能需要等待 5 分钟再试一次。应该显式传递重试次数和重试之间的延迟等参数,还是可以将这些变量嵌入函数中?