Functional programming 米兰达正在浏览名单

有没有一种简单的方法来浏览列表? 假设我想访问列表中的第5个数据,但不知道它是B ["A","A","A","A","B","A","A","A","A"] 有没有一种方法可以在不必对列表进行排序的情况下执行此操作?我对米兰达不太了解,但我希望可以使用函数跳过和获取 您可以通过使用skip和take生成函数来处理第五个元素。当skip和take不可用时,您可以轻松地自己创建它们 跳过:跳过列表中y个元素的数量,当y大于列表中的项目数量时,它将返回一个空列表 take:获取列表中第一个y个元素数

Functional programming SML斐波那契大数

我试着写我自己的fib函数,它适用于大数(超过50),但我没有运气。首先,我尝试了显而易见的解决方案,但结果很快就解决了。我的下一个解决办法是 $fun fib(a:int, b:int, index:int) = if(index = 1) then $ (a+b) $ else $

Functional programming 可以编译成本机代码的严格函数式语言

最近,我开始研究函数式语言,以使我的应用程序的一些算法部分更加可靠。我当然碰到了哈斯克尔。但它的懒惰给我带来了太多的惊喜。有时简单的事情变得越来越慢 所以我想知道有没有一种语言可以用来写函数式的小算法,但不需要不必要的惰性,这会导致更多的问题,然后会有所帮助 程序应该编译成Win32/64本机代码(最好是DLL),与C++具有类似的性能。 可能是最接近Haskell的,但是它是严格的和不纯洁的。这是它的继承者 OCaml、ML和Haskell都可以在任何通用平台上编译为机器代码 然而,根据我的经

Functional programming 计算纯函数式语言中的字节频率

如果我们有任务: 给定一个二进制数据块,计算其中字节的频率 在C语言中,即使对于较大的二进制块,答案也很简单,速度也相当快如何在没有副作用的情况下用纯函数式语言实现此功能? 例如,如果您编写了一个函数,该函数接受每个字节和字节列表的其余部分的频率计数,并返回修改后的频率计数,那么对于100M字节的数据集,它将不得不做大量的工作 此外,如果您对数据进行排序,然后以某种方式计算后续相同值字节的数量,那么排序本身将花费大量时间 有没有一种合理的方法来实现这一点?最简单的方法就是传入并返回将字节映射到计

Functional programming 获取ast的子树

我有一个布尔抽象语法树 type bast = True | False | Not of bast | Or of bast * bast | And of bast * bast 我想在它上面应用一个函数,得到所有返回true的子树 我的尝试: let findtrees f (ast: bast ) = let rec findtree (tree: bast ) (mylist: bast list) = match tree with

Functional programming 将闭包作为参数传递给另一个函数赢得';行不通

我有一个函数evaluate,它接受参数。第一个参数是一个Int。闭包的第二个参数,它接受Int并返回Double。函数求值然后返回一个[Double]。返回数组的第k个元素是使用k=0,1,…,n的值k计算第二个参数的结果 应该是这样的:[7,16,37,76,139]缺少myFunction:标签。您对评估的调用应该是: evaluate(5, myFunction: polyTableClosure) 此外,访问索引i处的空数组不会在该索引处创建新插槽。它将失败 必须将以下内容附加到数组

Functional programming 需要帮助理解延续功能吗

这是一个教学示例,用于说明CPS和尾部递归: fun sum [] k = k 0 | sum (x::xs) k = sum xs (fn y=>k(x+y)); 我在理解匿名函数fny=>k(x+y)如何正确汇总输入列表的元素时遇到了问题 据我所知,匿名函数意味着一个新函数,它有一个参数y,其中函数体调用原始函数k,参数为y+x 如果我调用sum[1,2,3,4,5](fnx=>x)我得到15。如果我有sum[1,2,3,4,5](fnx=>3x)答案是45。因此,sum函数的用

Functional programming 高阶函数澄清

我刚开始学习函数式编程(使用Scheme语言)。我读到高阶函数是一个函数,它要么接受另一个函数作为参数,要么返回另一个函数,要么两者都返回。因此,我尝试将以下代码转换为高阶函数: ;; define two procedures - one for calculating square & one for finding double of a number (define (square x) (* x x )) (define (double x) (+ x x )) (sq

Functional programming scala中处理状态的不变方法

我只是在学习Scala的同时开始我的FP之旅 现在需要在未过滤的web应用程序中维护列表[String]。当向端点发送POST请求时,应该从文件更新列表。当GET请求发送到同一端点时,将使用该列表 现在,我试图避免使用var来保存列表。我知道有时我们必须使用var,但我很好奇,有没有一种优雅的方法来处理这个问题。我试过使用scalaz.State迭代器和Steam。但是我被卡住了,因为我不知道如何将当前的不变状态传递给下一个请求。有什么建议吗 def update = State( l =>

Functional programming Ocaml-检查给定整数的每个数字是否小于;“基础”;递归地

以递归方式检查给定int的每个数字是否小于“base” 在“伪代码”中 boolean是基数(int-base,int-num) { 如果num=0 返回true; 否则,如果num mod 10函数应用运算符(在OcAML中只是一个函数的并列,并且它的参数,例如, f x>代码>)比算术运算符具有更高的优先级(即,它绑定得更紧),因此,fx/10表达式被OCaml视为(fx)/10 在您的例子中,is_base num/10被解析为(is_base base num)/10,即,首先使用bas

Functional programming 多参数多条件Ramda

我是函数式编程的新手,谁能帮我把这个函数转换成最好的功能 const isNotNil = R.complement(R.isNil); const isFunction = R.is(Function) const a = (value, value2, fn) => { if (isNotNil(value)) { return isFunction(fn) ? fn(value) : value } return value2; }; a(5,2, R

Functional programming 当计算值相等时,会发生类型不匹配

我是Idris的初学者,试图使代码有效 你能告诉我关于Idris的noob问题的好地方吗 我写了另一个过滤器,它还不能通过类型检查 这个新的过滤器的类型意味着过滤后的向量不能比原始向量长 然而,伊德里斯说 ... Specifically: Type mismatch between finToNat a and finToNat (we

Functional programming Elixir:如何使自定义类型实现==,<;,及>;

背景:我正致力于将这个F#歧视联盟转化为长生不老药: 类型套装= |钻石 |俱乐部 |心 |黑桃 我知道有几种不同的方法可以做到这一点,这不是我的问题 必须做到以下几点: Diamonds == Diamonds Diamonds < Hearts Spades > Hearts Diamonds==钻石 钻石心 黑桃>红桃 我惊讶地发现,Elixir没有一个类似于Haskell的Ordtypeclass的协议,而GitHub上的这个协议(只有很少的星星!) 是否有一种公认的或

Functional programming Ramda applySpec-保留未修改的道具

假设我有一个对象constfoo={a:1,b:2},我想添加一个基于b的属性c 我可以做到: applySpec({ a: prop('a'), b: prop('b'), c: ({ b }) => b + 1 }, foo) 然后得到如下对象:{a:1,b:2,c:3} 有更好的方法吗 我看过evolve、assoc和applySpec,但它们似乎都不适合使用。您可以使用R.chain创建一个应用规范的函数,然后将新对象与原始对象合并 如果R.chain与函

Functional programming Ocaml-运行时将代码编译为字符串

我想解析和编译我在运行时编写的函数,例如,我在运行时生成了以下字符串: let str=“fun x y z->[x;y;z;” 我正在寻找能让我做类似以下事情的东西: let myfun=eval str (*eval返回字符串中代码返回的值,以便myfun 具有以下类型:'a->'a->'a->'a->'a列表*) 在OCaml中有没有这样做的方法?我遇到了Dynlink,但我正在寻找一种更简单的方法。没有比编译代码和Dynlinking生成的库更简单的解决方案了 或者,可以使用REPL

Functional programming 现在有Scala、Erlang、Haskell等,为什么要使用LISP

据我所知,在过去,LISP是唯一强大的函数式编程语言。现在有很多,为什么人们仍然使用LISP及其奇怪的语法?有没有一种独特的杀手级功能?首先,一般的Lisp,特别是普通的Lisp,更多的是“多范式”而不是“功能性”。从这里开始,我将主要讨论CommonLisp(CL) 不过,并没有“一个杀手特性”。CL是一种可编程编程语言,使元编程变得容易。也就是说,您通常可以直接在该语言中执行“元级别”的操作,而无需使用将文本转换为基础语言的预处理器 CL还有一个非常强大的对象子系统(CLOS),到目前为止,

Functional programming 为工人讲解组合词

什么是组合词??? 它是一个没有自由变量的函数或定义吗 或者是这样的:根据他关于箭头的著名论文,“组合器是一种从程序片段构建程序片段的函数”,这是有利的,因为“…使用组合器的程序员可以自动构建大部分所需的程序,而不是手工编写每个细节”。他接着说,map和filter是这类组合词的两个常见例子 与第一个定义匹配的一些组合符: K Y 其他人(我可能错了——我没有读过这本书) 与第二个定义匹配的一些组合符: 地图 滤器 折叠/缩小(大概) 任何>>=、组合、fmap 我对第一个定义不感兴趣

Functional programming 已安装ocamlfind(findlib),但从未在Mac中找到任何额外的软件包

刚买了一个新的Mac,山狮和我希望把所有与ocaml相关的东西都设置好 我使用了以下命令: opam switch 4.00.1 opam install findlib opam install batteries 所有已成功安装,无错误 但我不能使用电池,对分等。总是说包找不到 有什么想法吗? 我应该设置任何路径吗 编辑: 有关更多信息,我遵循以下步骤: 1. install homebrew http://mxcl.github.com/homebrew/ ru

Functional programming 我如何处理erlang中的帐号?

我正在使用ETS制作银行账户管理系统,ETS也将持有活期和储蓄账户,我无法理解如何生成和保留账户编号序列,因为erlang变量是不可变的 那么,如何实现生成和保存帐号的功能,以便下次创建帐号时,它会将下一个帐号分配给上一个帐号?您可以创建一个流程,使当前帐号保持其状态。要获得下一个号码,您必须向该进程发送消息,该进程返回下一个号码并将其保存在其状态。这是gen_server实现的一个示例: -module(acc_number). -behavior(gen_server). -export(

Functional programming 证明LISP不起作用

我正在和一位同事讨论,他认为LISP是功能性的,而我认为不是。虽然我承认LISP程序可以在功能上编写,但LISP并不是“纯粹”功能性的(我相信Haskell所说的方式) 我不是lisp专家(事实上,我是lisp初学者)。有没有人能给我提供一个lisp代码片段,我可以向他展示它毫无疑问是不起作用的?谢谢。约翰·麦卡锡(John MCcarthy)在1958年编写的LISP原稿纯粹是功能性的。论文中根本没有副作用,因为它没有阅读,打印或设置,所以它确实是一种纯粹的功能性语言。不过,当他们制作解释器时

Functional programming 在Scheme语言中没有操作

我在如何用scheme语言定义no操作方面遇到了一些问题 喜欢;在c中 我想这样做: (cond [(null? exp) nop ] ..... ) 如果我让它空着,它会回来的 谢谢 Scheme没有语句,只有表达式。每个表达式都返回一个值,也可能永远不会返回- 所以你需要一个计算量不大的表达式。您可以使用nil或f或任何其他值: (cond ((null? exp) ()) .... ) 如果您编写的条件只有一个test,而没有body子表达式

Functional programming 如何使用函数式语言进行迭代?

促使我远离Lisp等函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我有一个用C表示屏幕像素RGB值的数组。在C中使用for循环更改颜色很简单,但是如何在Lisp中优雅地完成这一点呢 编辑: 对不起,我的问题措辞不正确。 在C语言中,当我想改变屏幕上的颜色时,我只需在数组的一部分上写一个for循环。 但在scheme中,clojure或haskell所有数据都是不可变的。所以当我改变矩阵的一部分时,它会返回一个全新的矩阵。这有点尴尬。有没有一种“干净”的方法可以改变矩阵某部分的颜

Functional programming purescript入门

我刚开始学习purescript,但是我在最后一个阶段被卡住了。 我按照说明操作,但当我运行grunt命令时,会出现以下错误: /Users/chad/playground/purescript/tests/tmp/node_modules/Control.Monad.Eff.Random/index.js:8 return Math.random(); ^ TypeError: undefined is not a function at Object.rand

Functional programming 什么是';(撇号)在球拍里?

我对“登录球拍的含义有点困惑。在我看来,同一个符号有不同的含义。请看下面的两个简单示例: 返回一个新分配的列表,其中包含vs作为其元素 生成与数据(即程序片段的表示)相对应的常量值,而不包含其词法信息、源位置等。引用的对、向量和框是不可变的 所以我的问题是: ”符号有两种含义(一个符号和一个列表),或者它们是相同的数据类型,并且列表实际上返回一个带引号的常量值?如果第二种情况是这样的,那么为什么这样做有效: > '(+ (- 2 13) 11) '(+ (- 2 13) 11) &g

Functional programming 在OCaml中实现类型方程生成器

嗨,我正在尝试实现我最近在课堂上学习的类型方程生成器 但是,当我尝试使用上述方法实现ADD表达式时,我得到一个错误:“此表达式的类型为('a->'b->typ_eqn)list,但表达式的类型应为(typ*typ)list。” 附加两个或多个类型列表与(typ*typ)列表基本上是一样的吗 编辑: 我也尝试过这种方法,但这会给我一条错误消息: 此表达式具有类型(typ*typ)列表,但应为类型(typ*typ)的表达式 为什么这会突然发生变化?在您的第一个版本中,您编写了[gen_equatio

Functional programming 函数式编程:为什么将配对作为基本构造单元?

Basic cons cell将两个任意对象粘在一起,是允许构建链表和任意数据对象的基本单元。问题:是否有理由坚持这种简单的语言设计说明(例如,在所有lisp系列中)? 为什么不为此使用固定长度数组(或某些嵌套堆栈)?我无法预见这会有什么问题,但更“紧凑”的内存、更少的指针分辨率和更少的“死重”单元格在定义数据层次结构方面有明显的优势。您将问题命名为“函数式编程:为什么将对作为基本构造单元?”,但是,这个标题并没有正确地反映这样一个事实,即许多重要且众所周知的函数式语言(例如Haskell、F#

Functional programming OCaml重新定义中缀运算符

练习问题要求解释为什么这不起作用。显然,从运行代码中,我看到它没有,但在本例中,我看不出原因。这个错误并不能说明什么 # let (+) x y z = x + y + z in 5 + 6 7;; Error: This expression has type int This is not a function; it cannot be applied. 谢谢 让我们一步一步走。激发一个REPL并键入: # let (+) x y z = x + y + z;; val ( + )

Functional programming 使用Ramda进行部分应用程序参数操作

这显然不起作用-因为总是不会像在WhenPropTrueAllways的顶级实现中那样使用whenTrueValue调用。有没有办法像我尝试的那样操纵调用另一个方法?用一个特定值替换一个参数,以及将一个函数应用于另一个参数 export const whenPropEq = curry((key, predicateValue, whenTrueFn, data) => when( propEq(key, predicateValue), whenTrueFn, )

Functional programming 如何将值转换为字符串?

我正在尝试将一个不是字符串的值打印到控制台 在本例中,它是一个整数数组 如何将允许这种行为的数组或任何其他值转换为字符串 module Main where import Prelude import Control.Monad.Eff.Console import Data.Array main = log [1, 2, 3, 4, 5] 当我运行上述程序时,编译器会出现以下错误: Could not match type Array Int with type St

Functional programming 在OCaml中,如何存储;“指针”;要删除列表中的元素吗?

我有一些数据类型的列表。但是,我还希望使用trie对该列表的元素进行索引,以便能够进行更高效的查找。但是我不想存储相同的元素两次,所以我想在列表中存储元素,在trie中,我在叶节点中存储指向元素的指针。这可能吗?我可以将元素的索引存储在列表中,但是通过索引获取链接列表的元素的速度很慢,所以这样做不行 如果这是对OCaml内存模型的误解,请道歉 只需存储元素即可。在引擎盖下,这不会复制值,它只是复制一个指向该值的指针,除了存储在单个内存字中的值(就像指针一样) 换句话说,像让b=a不要复制a。它们

Functional programming Ramda中带列表头的管道obj键列表

我怎么用管道输送呢 R.keys(obj)返回一个列表 R.head应获得列表的第一项 我错过了什么 const obj = {f: "hi"} const keysList = R.keys(obj); const head = R.head(keysList); const myPipe = R.pipe(keysList , head ) //? R.pipe需要一个函数列表,并返回一个新函数。调用该函数时,传递给该函数的任何参数都将传递给管道中的第一个函数,第一个函数的结果

Functional programming 给定一个列表创建一个元组列表SML

您好,我是Sml/nj的新手,我正在尝试修改一个输入,以将其赋予一个函数。我一直在修改输入 具体来说,我读取输入并将其存储在列表中。我想创建一个函数,给定一个偶数长度的列表,它将创建一个新的列表,但具有两个元素元组。 例如,如果我的输入是列表[2,7,4,6,5,8]我想创建这个列表[(2,7)、(4,6)、(5,8)] 我尝试过这个,但不幸的是它不起作用: fun maketuples [] = [] | maketuples x::xs = (x, hd xs) @ makektuple

Functional programming 具有Spring集成的函数式编程异常处理风格

如何使用Spring集成实现异常处理的函数式编程风格? i、 e.让易出错组件(如网关、路由器等)使用选项/or结构包装结果/异常,并继续处理集成流的其余部分,而不是让异常冒泡到调用方或发送到专用消息通道。 例如,如果我的集成流如下所示,如何包装网关组件以将一个或传递给以下转换器 IntegrationFlows .from(someChannel) .gateway(someGateway) .transform(someTransformer) .log() .get() 附属问题:您

Functional programming 您会使用哪种语言自学SICP?

我发现了真正学习函数式编程的错误。所以我的 下一个自学项目是通过考试。不幸的是,我从来没有 因为我在大学里不是计算机科学专业的学生,所以我学会了Lisp 虽然SICP不强调编程工具,但是 练习需要选择一种类似Lisp的语言来使用。好像 一些实现将是最不可能的途径 抵抗。另一方面,我听说其他人使用过和。在我看来,通俗的Lisp或Clojure应该是 更可能在生产代码中使用,因此 更适合我的简历。顺便说一句,我完全明白学习 语言本身是值得的,但学习一门 帮助我的简历仍然是一个好处。我是个资本家和学者

Functional programming 功能样式更新

这可能是一个矛盾的说法,但是如何以函数式编程风格更新数据实体呢?据我所知,函数式编程使用转换来返回不可变实体的输出。我唯一能想到的是完全替换原始实体,但这似乎与经典的更新方法几乎相同。简而言之,在函数样式中,每个数据实体都是不可变的,因此更新实际上是一个具有更新值的新数据实体,有点像.NET中字符串的工作方式 真正有趣的挑战是在处理IO时,很难以纯粹的功能性方式对I/O进行建模,从而产生类似这样的解决方法。您是在谈论磁盘数据库实体还是内存中的数据结构 对于后者,函数式语言使用持久化数据结构,实现

Functional programming 如何在Erlang中搜索列表中的项目?

我正在编写一个缓存gen服务器供公司使用。我想知道如何从列表中搜索一个项目,因为我想知道在erlang中比较各种数据结构(如dict、orddict、list、tuple、tree、queue等)的搜索成本,以用于缓存程序 例如: List = [{"A1",["ankit","sush", "Hover", "x4", "a3","nilesh","mike","erlang" | ...]}|...]. 现在,我想搜索A1键并在列表中搜索“mike”。搜索上述列表的最佳方式是什么 请提供一

Functional programming 延续传递样式与单子

连续传递样式(cps)和单子之间有什么区别。没有关系,因此这个问题与询问蓝色和冥王星之间的区别一样有意义。您可能想看看这一点,如中所述: 使用monad编程使人联想到延续传递风格(CPS),本文探讨了两者之间的关系。从某种意义上说,它们是等价的:CPS作为单子的特例出现,任何单子都可以通过改变答案类型嵌入到CPS中。但一元方法提供了额外的洞察力,并允许更好的控制 这篇论文非常严谨,实际上它并没有对CPS和单子之间的关系进行扩展。在这里,我尝试给出一个非正式但具有说明性的示例: (注意:下面是一个

Functional programming 如何在FP中处理全局的、可变的配置变量(或文件)?

在一个复杂的程序中,我试图尽可能地应用函数式编程模式,其中一个问题是许多配置文件只是被加载,并成为一个全局变量,可以从程序中的任何地方访问。这种方法会导致纠缠。如何以函数式编程方式处理配置文件?将配置变量建模为函数对我来说似乎是合理的。由此推断,函数将是不纯的,并且取决于状态,即配置文件。只要全局变量是常量,我看不到有害或非功能(不纯)编程风格?例如,最后执行的命令列表不是常量,它会得到更新。从这个意义上说,“配置文件”可能不是一个正确的名称。这听起来像一个日志文件?或者你真的从应用程序中的文件

Functional programming ocaml函数的参数阶

假设我有一个映射函数,如下所示: let rec map f xs = match xs with [] -> [] | hd :: tl -> f hd :: (map f tl) 当我将map的签名更改为let rec map xs f时,我遇到了一些错误, 有人能指出我缺少哪些知识并解释原因吗?如果您更改定义和递归调用,就没有问题 #让rec映射xs f=将xs与 [] -> [] |hd::tl->f hd::(映射tl f);; val映射:'a列表->('a->'b)-

Functional programming 从elm模型中删除值

我已经成功地为实现了删除播放器方法。 但是,如果不手动发送ForchFetchmsg(通过单击按钮)再次从服务器获取播放器,我就无法更新模型。这是我的代码: 我的删除按钮: deleteBtn : Player -> Html.Html Msg deleteBtn player = let message = Msgs.Delete player in a [ class "btn regular

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 59 页