purely-functional相关内容
我有一个 java.util.HashMap 对象 m(调用 Java 代码的返回值),我想获得一个带有额外的键值对. 如果 m 是 Clojure 映射,我可以使用: (assoc m "key" "value") 但是在 HashMap 上尝试会得到: java.lang.ClassCastException: java.util.HashMap 无法转换为 clojure.l
..
我试图从第一原则来理解函数式编程,但我仍然停留在纯函数世界和具有状态和副作用的不纯现实世界之间的接口上.从数学的角度来看, 什么是返回函数的函数? 什么是返回 IO 操作的函数(如 Haskell 的 IO 类型)? 详细说明:在我的理解中,纯函数是从域到共域的映射.最终,它是从计算机内存中的某些值到内存中的某些其他值的映射.在函数式语言中,函数是声明式定义的;即,它们描述了映射,但
..
纯函数是一个没有副作用的函数——它不能做任何类型的 I/O,也不能修改任何东西的状态——而且它是引用透明的——当使用相同的输入多次调用时,它总是给出相同的输出. 为什么用“纯"这个词来描述具有这些特性的函数?谁首先以这种方式使用“纯"这个词,什么时候?还有其他词的意思大致相同吗? 解决方案 为了回答您的第一个问题,数学函数通常被描述为“纯"某些特定变量.例如: 第一项是x的纯函
..
有大量关于数据结构的文本,以及数据结构代码库.我知道纯函数式数据结构更容易推理.然而,我很难理解在实际代码中使用纯函数式数据结构(使用或不使用函数式编程语言)而不是命令式对应物的现实优势.有人可以提供一些真实世界的案例,其中纯函数式数据结构具有优势以及为什么? 类似我在programming_language中使用data_structure_name来做应用的例子,因为它可以做certai
..
我对 Haskell 非常陌生,并且对该语言的“架构"印象深刻,但仍然困扰着我 monads 如何可以是纯粹的. 由于您拥有任何指令序列,这使它成为一个不纯的函数,尤其是具有 I/O 的函数从任何角度来看都不是纯函数. 是不是因为 Haskell 像所有纯函数一样假设 IO 函数也有返回值,但是以操作码或其他形式的?我真的很困惑. 解决方案 一种思考方式是 IO a 类型的值是
..
在 Haskell 中,差异列表,从某种意义上说 [a] 具有高效连接操作的列表表示 似乎是在功能上实现的组成. 函数和(动态)函数组合,虽然,也必须使用数据结构以某种方式在计算机的内存中表示,这提出了如何dlists 可以在 Haskell 中实现, 不使用函数组合,而是通过一些基本的纯功能节点数据结构.如何在与函数组合相同的性能保证下做到这一点? 解决方案 如这个答案
..
我想用PHP实现一个纯函数 如何通过值而不是通过引用传递对象? 换句话说,这是预期的输出: 功能更改($ obj){$ obj-> set_value(2);}$ obj = new Object();$ obj-> set_value(1);change($ obj);echo $ obj-> get_value();//1 解决方案 在此处阅读: http://php
..
我试图从基本原理上理解函数式编程,但是我仍然停留在纯函数世界与具有状态和副作用的不纯真实世界之间的接口上.从数学的角度来看, 什么是返回函数的函数? 什么是返回IO操作(例如Haskell的IO类型)的函数? 详细说明:在我的理解中,纯函数是从域到共域的映射.最终,它是从计算机内存中的某些值到内存中某些其他值的映射.在函数式语言中,函数是声明式定义的;即,它们描述的是映射,而不描述需
..
我正在阅读“纯粹的功能数据结构",并试图解决它们在haskell中进行的练习. 我已经以标准方式定义了 Tree data Tree a = Empty |节点a(树a)(树a)我想将 Set 定义为 Tree ,其中节点是 Ord 的实例.有没有办法在Haskell中表达这一点?像 type Set = Tree Ord 之类的东西,还是我每次想将某些数据结构表示为树时都认为要重新实现树?
..
我和这个问题存在相同的问题,但是在JavaScript的背景下. 来自维基百科: [纯函数的]返回值与相同参数 相同 在那里进一步要求不允许纯函数具有带有“可变参考自变量"的返回值的变化.在JavaScript中,每个普通对象都作为“可变引用自变量"传递.考虑以下示例: const f =(arr)=>长度const x = []console.log(f(x))//0x.pu
..
我有一个数组,我在map上.我需要将当前元素与前一个元素进行比较.我通过比较它们的id并根据此条件进行不同的操作来检测当前元素是否与先前的元素相同.有没有做索引数学的纯功能方法吗? items.map((item, index) => { if(item.id === items[index - 1 > 0 ? index - 1 : 0].id) { // do somet
..
我已经从我的上一个问题中学到了一些关于FFL分号的信息.但是,仍不清楚它们执行什么评估或执行顺序.因此,这是一个更具体的示例: [ expr_a, expr_b ; expr_c, expr_d ; expr_e, expr_f ] 以上代码的执行顺序应该是什么?在我的脑海中应该是: 评估& b 执行a,执行b 评估c& d 执行c,执行d 评估e& f 执行e,执行f
..
我正在尝试学习函数式编程和Scala,因此我正在阅读Chiusano和Bjarnason撰写的"Scala中的函数式编程".我在理解列表的情况下无法理解向左折叠和向右折叠的方法有什么困难.我在这里环顾四周,但没有找到适合初学者的东西.因此,本书提供的代码是: def foldRight[A,B](as: List[A], z: B)(f: (A, B) => B): B = as match
..
由于我喜欢使用Scala进行编程,因此在接受Google采访时,我要求他们给我一个Scala/函数式编程风格的问题.我得到的Scala功能样式问题如下: 您有两个由字母字符和代表退格符号的特殊字符组成的字符串.我们将此退格字符称为"/".到达键盘时,您将键入此字符序列,包括退格/删除字符.您要实现的解决方案必须检查两个字符序列是否产生相同的输出.例如,"abc","aa/bc". "abb/
..
在Haskell中, 差异列表 [a]具有有效串联操作的列表表示形式 似乎是在功能上实现的组成. 但是,还必须使用数据结构以某种方式在计算机内存中表示功能和(动态)功能组合,这引发了以下问题:解决方案 卡尔在评论中打了它.我们可以写 data TList a = Nil | Single a | Node !(TList a) (TList a) singleton ::
..
我正在尝试以一种更加惯用的功能方法来拆分不带正则表达式的字符串. case class Parsed(blocks: Vector[String], block: String, depth: Int) def processChar(parsed: Parsed, c: Char): Parsed = { import parsed._ c match { case '
..
有人可以举一个简单的例子说明状态monad优于直接传递状态吗? bar1 (Foo x) = Foo (x + 1) vs bar2 :: State Foo Foo bar2 = do modify (\(Foo x) -> Foo (x + 1)) get 解决方案 状态传递通常很乏味,容易出错,并且阻碍了重构.例如,尝试以邮购方式标记二叉树或玫瑰树: da
..
我怎样才能“杀死”耗时过长的纯粹计算?我试过 import System.Timeout fact 0 = 1 fact n = n *(fact $ n - 1) main = do maybeNum print maybeNum 但是,这不起作用。将(return。fact)99999999 替换为一个“真正的”IO函数,如 getLine ,
..
在纯粹的函数式语言中,你可以用值做的唯一事情就是对它应用一个函数。换句话说,如果你想做任何事情有趣的是 a 类型的值,您需要一个类型为 f :: a - >的函数(例如) b 然后应用它。如果有人用(a - > b) - >类型给您(翻转应用)a b ,是否可以替代 a ? 你会用(a - > b) - > B'/ code>?看起来它似乎是 a 的替身,我很想将它称为代理,或者来自 htt
..
这篇文章是识字的Haskell。只需放入一个像“pad.lhs”和 ghci 的文件就可以运行它。 > { - #LANGUAGE GADTs,Rank2Types# - } > import Control.Monad > import Control.Monad.ST > import Data.STRef 好的,所以我能够计算出如何表示纯代码中的ST m
..