有没有一种简单的方法来浏览列表?
假设我想访问列表中的第5个数据,但不知道它是B
["A","A","A","A","B","A","A","A","A"]
有没有一种方法可以在不必对列表进行排序的情况下执行此操作?我对米兰达不太了解,但我希望可以使用函数跳过和获取
您可以通过使用skip和take生成函数来处理第五个元素。当skip和take不可用时,您可以轻松地自己创建它们
跳过:跳过列表中y个元素的数量,当y大于列表中的项目数量时,它将返回一个空列表
take:获取列表中第一个y个元素数
我试着写我自己的fib函数,它适用于大数(超过50),但我没有运气。首先,我尝试了显而易见的解决方案,但结果很快就解决了。我的下一个解决办法是
$fun fib(a:int, b:int, index:int) = if(index = 1) then
$ (a+b)
$ else
$
最近,我开始研究函数式语言,以使我的应用程序的一些算法部分更加可靠。我当然碰到了哈斯克尔。但它的懒惰给我带来了太多的惊喜。有时简单的事情变得越来越慢
所以我想知道有没有一种语言可以用来写函数式的小算法,但不需要不必要的惰性,这会导致更多的问题,然后会有所帮助
程序应该编译成Win32/64本机代码(最好是DLL),与C++具有类似的性能。 可能是最接近Haskell的,但是它是严格的和不纯洁的。这是它的继承者
OCaml、ML和Haskell都可以在任何通用平台上编译为机器代码
然而,根据我的经
如果我们有任务:
给定一个二进制数据块,计算其中字节的频率
在C语言中,即使对于较大的二进制块,答案也很简单,速度也相当快如何在没有副作用的情况下用纯函数式语言实现此功能?
例如,如果您编写了一个函数,该函数接受每个字节和字节列表的其余部分的频率计数,并返回修改后的频率计数,那么对于100M字节的数据集,它将不得不做大量的工作
此外,如果您对数据进行排序,然后以某种方式计算后续相同值字节的数量,那么排序本身将花费大量时间
有没有一种合理的方法来实现这一点?最简单的方法就是传入并返回将字节映射到计
我有一个布尔抽象语法树
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
我有一个函数evaluate,它接受参数。第一个参数是一个Int。闭包的第二个参数,它接受Int并返回Double。函数求值然后返回一个[Double]。返回数组的第k个元素是使用k=0,1,…,n的值k计算第二个参数的结果
应该是这样的:[7,16,37,76,139]缺少myFunction:标签。您对评估的调用应该是:
evaluate(5, myFunction: polyTableClosure)
此外,访问索引i处的空数组不会在该索引处创建新插槽。它将失败
必须将以下内容附加到数组
这是一个教学示例,用于说明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函数的用
我刚开始学习函数式编程(使用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
场景:
您正在将视频上载到多个端点,每个端点都有不同的限制。我们在关联数组中有如下限制:
EndPointRestrictions = [
point1 = [
resolution: 4000,
extensions: [mp4, mov]
],
point2 = [
resolution: 1080,
extensions: [mp4, mov]
]
我只是在学习Scala的同时开始我的FP之旅
现在需要在未过滤的web应用程序中维护列表[String]。当向端点发送POST请求时,应该从文件更新列表。当GET请求发送到同一端点时,将使用该列表
现在,我试图避免使用var来保存列表。我知道有时我们必须使用var,但我很好奇,有没有一种优雅的方法来处理这个问题。我试过使用scalaz.State迭代器和Steam。但是我被卡住了,因为我不知道如何将当前的不变状态传递给下一个请求。有什么建议吗
def update = State( l =>
以递归方式检查给定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
我是函数式编程的新手,谁能帮我把这个函数转换成最好的功能
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
我是Idris的初学者,试图使代码有效
你能告诉我关于Idris的noob问题的好地方吗
我写了另一个过滤器,它还不能通过类型检查
这个新的过滤器的类型意味着过滤后的向量不能比原始向量长
然而,伊德里斯说
...
Specifically:
Type mismatch between
finToNat a
and
finToNat (we
背景:我正致力于将这个F#歧视联盟转化为长生不老药:
类型套装=
|钻石
|俱乐部
|心
|黑桃
我知道有几种不同的方法可以做到这一点,这不是我的问题
必须做到以下几点:
Diamonds == Diamonds
Diamonds < Hearts
Spades > Hearts
Diamonds==钻石
钻石心
黑桃>红桃
我惊讶地发现,Elixir没有一个类似于Haskell的Ordtypeclass的协议,而GitHub上的这个协议(只有很少的星星!)
是否有一种公认的或
假设我有一个对象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与函
我想解析和编译我在运行时编写的函数,例如,我在运行时生成了以下字符串:
let str=“fun x y z->[x;y;z;”
我正在寻找能让我做类似以下事情的东西:
let myfun=eval str
(*eval返回字符串中代码返回的值,以便myfun
具有以下类型:'a->'a->'a->'a->'a列表*)
在OCaml中有没有这样做的方法?我遇到了Dynlink,但我正在寻找一种更简单的方法。没有比编译代码和Dynlinking生成的库更简单的解决方案了
或者,可以使用REPL
据我所知,在过去,LISP是唯一强大的函数式编程语言。现在有很多,为什么人们仍然使用LISP及其奇怪的语法?有没有一种独特的杀手级功能?首先,一般的Lisp,特别是普通的Lisp,更多的是“多范式”而不是“功能性”。从这里开始,我将主要讨论CommonLisp(CL)
不过,并没有“一个杀手特性”。CL是一种可编程编程语言,使元编程变得容易。也就是说,您通常可以直接在该语言中执行“元级别”的操作,而无需使用将文本转换为基础语言的预处理器
CL还有一个非常强大的对象子系统(CLOS),到目前为止,
什么是组合词???
它是一个没有自由变量的函数或定义吗
或者是这样的:根据他关于箭头的著名论文,“组合器是一种从程序片段构建程序片段的函数”,这是有利的,因为“…使用组合器的程序员可以自动构建大部分所需的程序,而不是手工编写每个细节”。他接着说,map和filter是这类组合词的两个常见例子
与第一个定义匹配的一些组合符:
K
Y
其他人(我可能错了——我没有读过这本书)
与第二个定义匹配的一些组合符:
地图
滤器
折叠/缩小(大概)
任何>>=、组合、fmap
我对第一个定义不感兴趣
我有这个密码
Option = { }
function Option.nothing( )
local self = { isNone = true, isSome = false }
function self:orElse( alt )
return alt
end
function self:map( f )
return Option.nothing( )
end
function self:exec( f )
end
fun
刚买了一个新的Mac,山狮和我希望把所有与ocaml相关的东西都设置好
我使用了以下命令:
opam switch 4.00.1
opam install findlib
opam install batteries
所有已成功安装,无错误
但我不能使用电池,对分等。总是说包找不到
有什么想法吗?
我应该设置任何路径吗
编辑:
有关更多信息,我遵循以下步骤:
1. install homebrew
http://mxcl.github.com/homebrew/
ru
我正在使用ETS制作银行账户管理系统,ETS也将持有活期和储蓄账户,我无法理解如何生成和保留账户编号序列,因为erlang变量是不可变的
那么,如何实现生成和保存帐号的功能,以便下次创建帐号时,它会将下一个帐号分配给上一个帐号?您可以创建一个流程,使当前帐号保持其状态。要获得下一个号码,您必须向该进程发送消息,该进程返回下一个号码并将其保存在其状态。这是gen_server实现的一个示例:
-module(acc_number).
-behavior(gen_server).
-export(
我正在和一位同事讨论,他认为LISP是功能性的,而我认为不是。虽然我承认LISP程序可以在功能上编写,但LISP并不是“纯粹”功能性的(我相信Haskell所说的方式)
我不是lisp专家(事实上,我是lisp初学者)。有没有人能给我提供一个lisp代码片段,我可以向他展示它毫无疑问是不起作用的?谢谢。约翰·麦卡锡(John MCcarthy)在1958年编写的LISP原稿纯粹是功能性的。论文中根本没有副作用,因为它没有阅读,打印或设置,所以它确实是一种纯粹的功能性语言。不过,当他们制作解释器时
我在如何用scheme语言定义no操作方面遇到了一些问题
喜欢;在c中
我想这样做:
(cond
[(null? exp) nop ]
.....
)
如果我让它空着,它会回来的
谢谢 Scheme没有语句,只有表达式。每个表达式都返回一个值,也可能永远不会返回-
所以你需要一个计算量不大的表达式。您可以使用nil或f或任何其他值:
(cond
((null? exp) ())
....
)
如果您编写的条件只有一个test,而没有body子表达式
促使我远离Lisp等函数式语言的一个原因是我不知道如何进行“原始”数组迭代。比如说,我有一个用C表示屏幕像素RGB值的数组。在C中使用for循环更改颜色很简单,但是如何在Lisp中优雅地完成这一点呢
编辑:
对不起,我的问题措辞不正确。
在C语言中,当我想改变屏幕上的颜色时,我只需在数组的一部分上写一个for循环。
但在scheme中,clojure或haskell所有数据都是不可变的。所以当我改变矩阵的一部分时,它会返回一个全新的矩阵。这有点尴尬。有没有一种“干净”的方法可以改变矩阵某部分的颜
我有一些功能
(define adjs '(black brown fast hairy hot quick red slow))
(define adj?
(lambda (a) (if (member a adjs) #t #f)
)
(define OK
(lambda (x)
(cond
((equal? x()) #t)
((equal
我刚开始学习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
我对“登录球拍的含义有点困惑。在我看来,同一个符号有不同的含义。请看下面的两个简单示例:
返回一个新分配的列表,其中包含vs作为其元素
生成与数据(即程序片段的表示)相对应的常量值,而不包含其词法信息、源位置等。引用的对、向量和框是不可变的
所以我的问题是:
”符号有两种含义(一个符号和一个列表),或者它们是相同的数据类型,并且列表实际上返回一个带引号的常量值?如果第二种情况是这样的,那么为什么这样做有效:
> '(+ (- 2 13) 11)
'(+ (- 2 13) 11)
&g
嗨,我正在尝试实现我最近在课堂上学习的类型方程生成器
但是,当我尝试使用上述方法实现ADD表达式时,我得到一个错误:“此表达式的类型为('a->'b->typ_eqn)list,但表达式的类型应为(typ*typ)list。”
附加两个或多个类型列表与(typ*typ)列表基本上是一样的吗
编辑:
我也尝试过这种方法,但这会给我一条错误消息:
此表达式具有类型(typ*typ)列表,但应为类型(typ*typ)的表达式
为什么这会突然发生变化?在您的第一个版本中,您编写了[gen_equatio
请参见下面的示例
fn fx(x: i32) -> i32
{
x
}
fn test_Functor()
{
// case 1. Initialization
let myFunctor: &Fn(i32) -> i32 = &fx ;
// case 2. Assignment
//let myFunctor: &Fn(i32) -> i32;
//myFunctor= &fx ;
}
Basic cons cell将两个任意对象粘在一起,是允许构建链表和任意数据对象的基本单元。问题:是否有理由坚持这种简单的语言设计说明(例如,在所有lisp系列中)?
为什么不为此使用固定长度数组(或某些嵌套堆栈)?我无法预见这会有什么问题,但更“紧凑”的内存、更少的指针分辨率和更少的“死重”单元格在定义数据层次结构方面有明显的优势。您将问题命名为“函数式编程:为什么将对作为基本构造单元?”,但是,这个标题并没有正确地反映这样一个事实,即许多重要且众所周知的函数式语言(例如Haskell、F#
练习问题要求解释为什么这不起作用。显然,从运行代码中,我看到它没有,但在本例中,我看不出原因。这个错误并不能说明什么
# 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 ( + )
我已经使用scalaz的Memo有一段时间了,但是,我觉得我无法保持纯粹的:
def compute(a: Int, b: Int): Int = {a+b} //an expensive computation
val cache = Memo.immutableHashMapMemo[(Int, Int), Int]{
case ((a,b)) => compute(a,b)
}
现在,我在类型Set[(Int,Int)]中有s1和s2。例如,s1=Set((1,1)、(1,2)
我已经写了这个代码
(define (in-list? val ls)
(if (null? ls) #f
(if
(= (car ls) val) #t
(in-list? val (cdr ls))
)
)
)
(define (intersect ls1 ls2)
(if (null? ls1)
'()
(if (in-list? (car ls1) ls2)
(cons (car ls1)
我有一个营养对象数组,看起来像这样:
[
{
calories: {total: 0, fat: 0},
vitamins: {a: {total: 0, retinol: 0}, b6: 0, c: 0},
fats: {total: 0},
minerals: {calcium: 0}
},
{
calories: {total: 150, fat: 40},
vitamins: {a: {total: 100}, b6: 30,
例如,给定如下所示的地图:
{
"k1": {
"k2": {
"k3": {
"k4": "v"
}
}
}
}
还有一个字段列表[“k1”、“k2”、“k3”],我需要检索部分{“k4”:“v”}
下面是我的java7风格代码:
// Ignore the map building code.
Map map1 = new HashMap();
Map map2 = new HashMap();
Map map3 = new
这显然不起作用-因为总是不会像在WhenPropTrueAllways的顶级实现中那样使用whenTrueValue调用。有没有办法像我尝试的那样操纵调用另一个方法?用一个特定值替换一个参数,以及将一个函数应用于另一个参数
export const whenPropEq = curry((key, predicateValue, whenTrueFn, data) =>
when(
propEq(key, predicateValue),
whenTrueFn,
)
假设我有几个函数可以对某些数据执行业务逻辑:
function addEmployees(data, numberOfNewEmployees){
// Business logic...
data.employeeCount += numberOfNewEmployees;
return data;
}
function withdrawFunds(data, withdrawAmount){
// Business logic...
data.che
我正在尝试将一个不是字符串的值打印到控制台
在本例中,它是一个整数数组
如何将允许这种行为的数组或任何其他值转换为字符串
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
我有一些数据类型的列表。但是,我还希望使用trie对该列表的元素进行索引,以便能够进行更高效的查找。但是我不想存储相同的元素两次,所以我想在列表中存储元素,在trie中,我在叶节点中存储指向元素的指针。这可能吗?我可以将元素的索引存储在列表中,但是通过索引获取链接列表的元素的速度很慢,所以这样做不行
如果这是对OCaml内存模型的误解,请道歉 只需存储元素即可。在引擎盖下,这不会复制值,它只是复制一个指向该值的指针,除了存储在单个内存字中的值(就像指针一样)
换句话说,像让b=a不要复制a。它们
我正在继续学习Racket(在本例中是函数编程)
我必须以函数式编程方式实现此循环:
此时此刻,我有以下代码:
#lang racket
(define EGS0
(lambda (PSET NSET CSET HSET)
(map (lambda (h)
(cond
[(not (andmap (lambda (p) (my-function h p)) PSET)) h]
[(not (ormap (l
我怎么用管道输送呢
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需要一个函数列表,并返回一个新函数。调用该函数时,传递给该函数的任何参数都将传递给管道中的第一个函数,第一个函数的结果
您好,我是Sml/nj的新手,我正在尝试修改一个输入,以将其赋予一个函数。我一直在修改输入
具体来说,我读取输入并将其存储在列表中。我想创建一个函数,给定一个偶数长度的列表,它将创建一个新的列表,但具有两个元素元组。
例如,如果我的输入是列表[2,7,4,6,5,8]我想创建这个列表[(2,7)、(4,6)、(5,8)]
我尝试过这个,但不幸的是它不起作用:
fun maketuples [] = []
| maketuples x::xs = (x, hd xs) @ makektuple
如何使用Spring集成实现异常处理的函数式编程风格?
i、 e.让易出错组件(如网关、路由器等)使用选项/or结构包装结果/异常,并继续处理集成流的其余部分,而不是让异常冒泡到调用方或发送到专用消息通道。
例如,如果我的集成流如下所示,如何包装网关组件以将一个或传递给以下转换器
IntegrationFlows
.from(someChannel)
.gateway(someGateway)
.transform(someTransformer)
.log()
.get()
附属问题:您
我发现了真正学习函数式编程的错误。所以我的
下一个自学项目是通过考试。不幸的是,我从来没有
因为我在大学里不是计算机科学专业的学生,所以我学会了Lisp
虽然SICP不强调编程工具,但是
练习需要选择一种类似Lisp的语言来使用。好像
一些实现将是最不可能的途径
抵抗。另一方面,我听说其他人使用过和。在我看来,通俗的Lisp或Clojure应该是
更可能在生产代码中使用,因此
更适合我的简历。顺便说一句,我完全明白学习
语言本身是值得的,但学习一门
帮助我的简历仍然是一个好处。我是个资本家和学者
这可能是一个矛盾的说法,但是如何以函数式编程风格更新数据实体呢?据我所知,函数式编程使用转换来返回不可变实体的输出。我唯一能想到的是完全替换原始实体,但这似乎与经典的更新方法几乎相同。简而言之,在函数样式中,每个数据实体都是不可变的,因此更新实际上是一个具有更新值的新数据实体,有点像.NET中字符串的工作方式
真正有趣的挑战是在处理IO时,很难以纯粹的功能性方式对I/O进行建模,从而产生类似这样的解决方法。您是在谈论磁盘数据库实体还是内存中的数据结构
对于后者,函数式语言使用持久化数据结构,实现
我正在编写一个缓存gen服务器供公司使用。我想知道如何从列表中搜索一个项目,因为我想知道在erlang中比较各种数据结构(如dict、orddict、list、tuple、tree、queue等)的搜索成本,以用于缓存程序
例如:
List = [{"A1",["ankit","sush", "Hover", "x4", "a3","nilesh","mike","erlang" | ...]}|...].
现在,我想搜索A1键并在列表中搜索“mike”。搜索上述列表的最佳方式是什么
请提供一
连续传递样式(cps)和单子之间有什么区别。没有关系,因此这个问题与询问蓝色和冥王星之间的区别一样有意义。您可能想看看这一点,如中所述:
使用monad编程使人联想到延续传递风格(CPS),本文探讨了两者之间的关系。从某种意义上说,它们是等价的:CPS作为单子的特例出现,任何单子都可以通过改变答案类型嵌入到CPS中。但一元方法提供了额外的洞察力,并允许更好的控制
这篇论文非常严谨,实际上它并没有对CPS和单子之间的关系进行扩展。在这里,我尝试给出一个非正式但具有说明性的示例:
(注意:下面是一个
在一个复杂的程序中,我试图尽可能地应用函数式编程模式,其中一个问题是许多配置文件只是被加载,并成为一个全局变量,可以从程序中的任何地方访问。这种方法会导致纠缠。如何以函数式编程方式处理配置文件?将配置变量建模为函数对我来说似乎是合理的。由此推断,函数将是不纯的,并且取决于状态,即配置文件。只要全局变量是常量,我看不到有害或非功能(不纯)编程风格?例如,最后执行的命令列表不是常量,它会得到更新。从这个意义上说,“配置文件”可能不是一个正确的名称。这听起来像一个日志文件?或者你真的从应用程序中的文件
假设我有一个映射函数,如下所示:
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)-
我已经成功地为实现了删除播放器方法。
但是,如果不手动发送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 页