首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++17,标准库新引入的并行算法

内容包括搜索,计数,区间及元素操作等等.新标准重载了其中69个算法并新增了7个算法.重载的算法和新增的算法都支持指定一个所谓执行策略(execution policy)的参数,通过调整这个参数,你可以指定算法是以串行...下面是一个 Haskell 的相关示例 (1) 和 (2) 处的代码分别定义了一个整数列表(ints)和一个字符串列表(strings).在 (3) 中,我给整数列表(ints)应用了一个 lambda...(9) 中的操作可能有些难以理解,你必须从右往左来阅读这几个表达式.scanl1 (+) . map(\a -> length a) (即(7)) 是一个函数组合,其中的点号(.)用以组合左右两个函数....所执行的操作很类似,其中第一步的 lambda 函数将元素映射为了元素的长度,对应的 Haskell 表达式为: scanl1 (+) . map(\a -> length a) $ strings...现在,代码中的 reduce 函数 (9) 看起来就比较简单了,他需要在各个(字符串)元素之间放置 “:” 字符.因为结果的开头不能带有 “:” 字符, reduce 的迭代是从第二个元素开始的(strVec2

1.1K20

你知道ping命令是如何工作的吗?

你知道ping命令是如何工作的吗? 我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?ping命令是基于ICMP协议工作的。...如果是差错报文,那么数据部分由两个16位的unused部分和IP头、8字节的正文组成。 ICMP报文分类大家可以看华为的文档,我这里不在叙述:什么是ICMP?ICMP如何工作?...在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。 五、差错报文 根据什么是ICMP?ICMP如何工作?...这个很容易想到啊,一旦返回类型为“需要进行分片但设置了不分片位”的ICMP差错报文就减小分组长度,直到达到目的主机,这不就测试出了整个路径的MTU吗?...参考文献: [1] 趣谈网络协议 (geekbang.org) [2] 什么是ICMP?ICMP如何工作? - 华为 (huawei.com)

40130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从惰性IO说起_Haskell笔记6

    所以你不断灌水进去直到一加仑,马桶就会自动冲水,在水里面的数据也就会被看到。但你也可以手动地按下冲水钮来冲水。他会让现有的水被冲走。冲水这个动作就是hFlush这个名字的含意。...所以,为了解决这个问题,就像引入foldl的严格版本(非惰性版本)foldl'一样,我们引入了ByteString P.S.上面提到的“承诺”,其实在Haskell有个对应的术语叫thunk ByteString...,又具有惰性的内存优势,所以大多数时候用lazy版本 P.S.64K这个大小是有讲究的: 64K有很高的可能性能够装进你CPU的L2 Cache 常用函数 ByteString相当于另一种List,所以...那么,纯函数能造出来随机数吗? 造伪随机数还是有点可能的。.../io.hs main = print "hoho" 符合预期,这里用了lambda函数,能够访问外部的file变量,如果异常处理函数相当庞大,就不太容易了,例如: exists' = do file

    2.3K30

    听君一席话,如听一席话,解释解释“惰性求值”~

    最小化 计算机要做的工作。...第一节示例的 JavaScript 的代码虽然是有惰性求值的思想体现,但是其本身并不是惰性求值; 惰性求值是编程语言的特性设计,很多纯粹的函数式编程语言都支持这种设计; 比如在 Haskell 中实现上述示例...有点像 Promise 的意思,你不告诉我 resolve/reject,我就 pending;Haskell 中,你不告诉我什么时候调用这个值,我就维持 thunk 的状态; 无限列表 在 Haskell...(sum) //5000000050000000 而在 Haskell 中,则会报错 内存溢出; foldl (+) 0 [1..100000000] *** Exception: stack overflow...(思路:强制求值第一个参数,返回第二个参数;) 函数式语言和命令式语言的内存模型; 懒惰奥义 听君一席话,如听一席话,希望看完本篇后,有人再问你“什么是惰性求值”,能心里有个基本的谱~~ 人天性爱偷懒

    66120

    Monadic Function_Haskell笔记12

    Applicative最关键的是这个东西: () :: Applicative f => f (a -> b) -> f a -> f b 实际上用Monad也能实现,叫做ap: ap :: Monad...> join (Just (Just (Just 1))) Just (Just 1) 注意,类型上要求内层和外层的Monad相同(都是m),所以join (Just [1])之类的是无法正常工作的...,[1,3],[1],[2,3],[2],[3],[]] 从作用上来看是个求幂集(集合的所有子集组成的集合,包括空集和自身)的函数,考虑一下filterM是如何做到的?...) 0 [1..10] 55 P.S.一个小细节,foldl与foldr的累加函数的参数顺序是相反的,前者是a v,后者是v a 如果希望给foldl添上一个计算语境(比如可能会失败的语境),用foldM...,是因为Haskell函数默认的柯里化特性,只有填满参数,才返回值。

    93430

    你平时看到的是假新闻吗?这个博士做的小程序,能帮你查一查 | 晓组织 #23

    最近一年,我的生活中多了一个新的关键词:假新闻。 从去年下半年开始,经常有人给我发来一些英文媒体的文章,让我「鉴定」:这个页面可信吗?上面的消息靠谱吗?...更懂门道一些的人还会问我:这个网站是倾向左派还是右派的? 原来,去年发生的英国脱欧和美国大选吸引了全世界的目光。许多中国人也都在密切关注着西方的政治局势,但毕竟有语言和文化障碍,很容易被假新闻骗到。...此外,部分数据来自我的个人研究。 这个小程序主要依托的平台是我自己的公众号「新闻实验室」。这是一个纯粹的公益项目,我搜集和整理数据大概花了一两个月。...未来,这个小程序将不断升级,我们会收录更多的媒体,也考虑增加更多的功能,帮助大家更全面地了解西方媒体。 小程序推出之后的主要推广渠道是我自己的微信、微博、知乎等。...值得一提的是,小程序上线不久之后,我就收到了西安外国语大学一位老师的来信,她不仅建议了一些可以添加的媒体条目,更在她自己的「英语新闻阅读」课程上使用了这个小程序,并推荐给了学生们。

    1K30

    Haskell lambda 与 $ 与 函数组合

    lambda lambda就是匿名函数,有些时候我们会需要一个函数而这个函数可能只用到一次,并没有重用的场景,我们就可以搞一个 临时 的匿名函数来满足我们的计算。...(\xs -> length xs > 10) lambda首先是一个\,后面是用空格分隔的参数,->后边就是函数体。通常会用括号括起来。...用空格的函数调用符是左结合的,如 f a b c 与 ((f a) b) c 等价,而 则是右结合的 $是优先级最低的中缀右结合函数,从签名来看,只是个函数调用符,相当于在右边加括号 tip: $是个中缀函数...以下面的函数为例: sum’ :: (Num a) => [a] -> a sum’ xs = foldl (+) 0 xs 等号的两端都有个 xs。...foldl (+) 0 回传的就是一个取一 List 作参数的函数,我们把它修改为 sum' = foldl (+) 0,这就是 point free style。

    8010

    函数式编程了解一下

    简单地说,函数是将输入转换为输出的东西。只是事情并没有那么简单。思考一下,在Python中的下面这个函数的意义: def square(x): return x*x 这个函数很简单。...事实真的是这样吗? 如果事先没有定义 global_list,那么这个函数就不能工作,它的输出是相同的列表,尽管经过了修改。...它比较短,也更快,因为我们不需要迭代太多的数组元素。如果你理解 filter, map 和 reduce 如何工作,代码也就不难理解了。 这并不意味着所有的函数代码都使用 map、reduce 等。...这也不意味着你需要函数式编程来理解 map 和 reduce。只是当你抽象循环时,这些函数会弹出很多。 1.Lambda函数 在谈到函数式编程的历史时,许多人都是从lambda函数的发明开始的。...尽管 lambda 是函数式编程毫无疑问的基石,但它们并不是根本原因。 Lambda 函数是可用于使程序起作用的工具。但是,我们也可以在面向对象的编程中使用lambda。

    66830

    用 350 行代码从零开始,将 Lisp 编译成 JavaScript

    整数对应它本身的值,变量对应它在当前环境中绑定的值,表达式列表对应一个函数调用,该列表的第一个参数是相应的函数,剩下的表达式是传递给这个函数的参数。...你能够在 REPL 中使用这些数据类型,验证它们确实有用。 我们不在语法中定义 lambda、let 或其它的内建函数,原因在于,当前情况下我们没必要用到这些东西。...另一件你想做的事情可能是在语法中添加一些注释信息。比如定位:Expr 是来自哪个文件的,具体到这个文件的哪一行哪一列。你可以在后面的阶段中使用这一特性,打印出错误定位,即使它们不是处于解析阶段。...这解释了为什么 Haskell 执行解析工作这么棒。在定义完高级部分后,我们还需要定义低级别的 parseName 和 parseInt。 我们能在这门语言中用什么字符作为名字呢?...这和我们在 printExpr 中做的基本上是一样的。我们还会追踪元素的作用域,这样我们才可以用合适的方式缩进生成的代码。

    1K40

    Scala类型推导Scala类型推导

    根据Picrce的说法:“类型系统是一个可以根据代码段计算出来的值对它们进行分类,然后通过语法的手段来自动检测程序错误的系统。” 类型可以让你表示函数的域和值域。...例如,在数学里,我们经常看到下面的函数: f: R -> N 这个定义告诉我们函数”f”的作用是把实数集里的数映射到自然集里。 抽象地说,这才是具体意义上的类型。...类型系统给了我们一些表示这些集合的更强大的方式。 有了这些类型标识,编译器现在可以 静态地(在编译期)判断这个程序是正确的。... 子类关系的真正意思是:对于一个给定的类型T,如果T’是它的子类,那么T’可以代替T吗?...基于流的类型推导在偏应用函数场景下,不能对参数类型省略 类型推导算法 类型推导(Type Inference)是现代高级语言中一个越来越常见的特性。其实,这个特性在函数式语言 中早有了广泛应用。

    2.6K20

    Kotlin版图解Functor、Applicative与Monad

    与从 Swift 版翻译而来的 Kotlin 版不同的是,本文是直接从 Haskell 版原文翻译而来的。 这是一个简单的值: ? 我们也知道如何将一个函数应用到这个值上: ? 这很简单。...fmap 向我们展示了它的成果。 但是 fmap 怎么知道如何应用该函数的呢? 究竟什么是 Functor 呢? 在 Haskell 中 Functor 是一个类型类。 其定义如下: ?...在 Kotlin 中,可以认为 Functor 是一种定义了 fmap 方法/扩展函数的类型。 以下是 fmap 的工作原理: ?...Applicative 定义了 (*)(在 Haskell 中是 ),它知道如何将一个 包装在上下文中的 函数应用到一个 包装在上下文中的 值上: ?...Monad 有一个函数 ))=(在 Haskell 中是 >>=,读作“绑定”)来做这个。 让我们来看个示例。 老搭档 Maybe 是一个 monad: ?

    1.2K20

    Optional拯救你!

    万一我们忘记对某个可能为null的对象进行非空检测怎么办?使用null来说明某个值缺失是一种错误的方式, 下文将说明这个问题并给出更好的解决办法。 先看看别的编程语言是如何处理这个问题的。...: "UNKNOWN"; 其他的一些函数式编程语言,比如Haskell, Scala,使用了一种别的方式。Haskell有一个Maybe型态,这个型态代表了一种有可选值的类型。...通过Optional,可以从方法签名就知道这个函数有可能返回一个缺失的值,这样强制你处理这些缺失值的情况。 Optional的正确打开方式 废话扯了这么多,来点实际的例子吧!...Haskell Maybe Monad只吸收了一部分,不过已经很不错了,期待什么时候能引入Grovvy的?.操作符,在处理空指针问题上,?.更加简洁有力。...虽然Grava项目也有一个Optional类,但是没有函数式接口,我们所能做的不过是把if (obj == null)替换为if (opt.isPresend())罢了;虽说能提高类型安全性,但是还是得写一堆

    99320

    成为函数式编程工程师四年,我为什么说它既“流氓”又“可爱”

    向我付费的人们大都希望开发结果包括以下几个方面: 代码能够可靠地工作,即使是应用程序中不经常使用的部分也是如此。 代码能被其他人轻易理解。我不会永远陪在他们身边解释代码。...而且我非常喜欢那些组织得很好的代码,我可以很容易和安全地改变它以适应新的需求。 因此,如果软件工程的目标是正常运作的、可理解及可维护的软件,那么顺着这个逻辑提出的问题是:函数式编程能帮助我们实现它吗?...按照其主页上的描述,Haskell 是一种高级的、纯粹的函数式编程语言,目前也是我最喜欢的编程语言之一。 你几乎不可能在其他语言中得到比 Haskell 更多的“FP”基因了。...“纯函数式的”,但它的代码是完全、彻底的垃圾: 当我第一次写好它后,它出现了几个 bug,我花了很多时间来追踪它们。...good_code=c^3 本质而言,我认为所有的好代码都具有以下特性: 你可以很好地理解它是如何工作的,以至于有理由相信它是正确的(并且在大多数情况下,这种信心是正确的!)。

    35520

    newtype_Haskell笔记8

    类定义的行为,具体见Functor与Applicative_Haskell笔记7 二.newtype ZipList就是因这个场景而产生的,本质上是对List的包装,定义如下: newtype ZipList...不像type创建的别名类型可以与原类型等价换用,newtype创建的新类型与原类型是完全不同的东西,唯一的联系是新类型内部实际操作的是原类型(通过持有原类型实例引用),通过这种方式在外层实现对原类型的扩展...要求newtype声明的类型只能有一个值构造器,并且这个值构造器只能有一个参数(field)。...(typeclass)实现时 四.newtype与惰性计算 Haskell中大多数计算都是惰性的(少数指的是foldl'、Data.ByteString之类的严格版本),也就是说,计算只在不得不算的时候才会发生...),例如: > head [1, undefined, 3, undefined, undefined] 1 > let (a, _) = (1, undefined) in a + 1 2 特殊地,函数调用时的模式匹配本身是需要计算的

    62130

    柯里化有用吗?

    依靠这个技巧让代码变得更有表达力仍旧是一个好的想法吗? 我并不是那么确信。...“这不是Haskell” 当我一开始提出要把柯里化作为一个新增功能放到我们工作中的工具箱中时,我的同事William(不是真名)坚决坚持: 这不是Haskell!...你需要权衡利弊;足够简单能防止bug产生并且能满足生存和发展需求,足够易用能够让你的团队不需要快速学习新技术就能够理解它。...Haskell和JavaScript的第一点不同是,在Haskell中,柯里化是内置的概念。这是入门的门槛——因此所有的Haskell开发者都知道这个概念。...var threeP = Promise.resolve(1) .then(add(2)) 嵌入在大多数应用的更复杂的代码中,容易引起你或者你的同事浪费几个小时来查找这个神秘函数的出处。

    84430

    只为兴趣,2024年你该学什么编程?

    讲动人的故事,写懂人的代码 当你想学编程但不是特别关心找工作的时候,选哪种语言学完全取决于你自己的目标、兴趣和能找到的学习资料。一个很重要的点,别只学一种语言啊!...如果你正打算用函数式编程来处理数据、转换数据、或者做些并发任务,那你得试试 Haskell,这绝对是个不错的起点。有本书叫《Learn You a Haskell for Great Good!》...,是个超赞的入门书,还能在线免费阅读呢!书写得轻松有趣,非常适合新手哦。还附上了一本热门的 Haskell 书的链接。f-05: 新锐编程语言集萃:Haskell趣学指南想轻松愉快地实现复杂系统?...and F#》就是个不错的选择,让你深入浅出地理解如何用 F# 进行函数式设计,是你进阶学习的好帮手。...你知道吗,最近谷歌都开始用 Rust 重写他们原来用 C++ 写的系统了,这可是大大的印证了 Rust 在系统编程领域的重要性呢。

    42853

    新技术学习不完全指北:以 Rust 为例

    除了工作需求以外,个人兴趣是学习动机的另一大来源。大部分技术岗位的工作需求,可能没有那么多,甚至掌握陈旧的技术栈也能应付好多年。等到突然被输送到社会,才发现自己的技术竞争力不足。...3)递归函数:光线追踪算法是一个在递归函数里不断产生新的光线路径的算法 4)包/crate 的使用:rand 和 threadpool 5)性能优化:使用多线程优化光线追踪算法性能 6)单元测试 7)cli...为此我还写了 3 篇文章,描述如何优化光线追踪的渲染表现:《React 优化技巧在 Web 版光线追踪里的应用:上、中和下》,恰好可以拿来跟 Rust 对比性能表现。...不断积累的成果,有大有小,有的可能已经被继续升级,甚至得到其他人的广泛认可,它们构成了你的成就。...在这个过程中,我们会碰到很多迷思,它们可能降低了我们学习的乐趣,可能打击了我们学习的自信心。如何抗住这些负面思绪,正确的看待学习中遇到的各种困惑,是我们需要长期努力的方向。

    70440

    好的编程语言具备哪些特性?

    如果你不知道 Tony Hoare 是谁,你可能会记得他是几年前在公众场合为发明了「NULL」而道歉的人。他本想避免这个,但实施起来太容易了,所以他无法抗拒。...Haskell 的搜索结果似乎一致称赞这种语言。难道我们使用其它语言的程序员只是不理智吗? 当然,Haskell 是一种非常有趣的语言,但它非常抽象。你真的需要六种不同的方法来实现阶乘吗?...Haskell 遇到了一个「神秘元组问题」,因为尽管类型的定义非常严格,但是每个函数中的组件可以有不同的名称。...在用 Go 编程的同事们表示,他们更喜欢使用 Go,并不再纠结于如何用不同的语言「优雅地」完成任务。 我从 Go 中得到的启发是,不去追求某种理论上的「特征完整性」是可以的。...如果 N 为零,我们的工作就完成了,n0 是我们正在寻找的值。 如果 N 是 1 或更大,我们创建一个新的状态对象,其中 N 减少,斐波那契关系向前一步计算。然后这个新对象被发送回匹配器。

    2.1K10

    你觉得“惰性求值”在 JS 中会怎么实现?

    可以简单地把 thunk 看做是一个未求得完全结果的表达式与求得该表达式结果所需要的环境变量组成的函数,这个表达式与环境变量形成了一个无参数的闭包(parameterless closure),所以 thunk...赋值的时候,我不进行计算,把你包装成一个 暂停等待,等你调用 next() 的时候,我再计算; 代码 这不就是最简单版本的 JS 惰性求值 Thunk 的实现吗?...Haskell 中的无限列表不就是 MDN 中 Generator 所实现的 无限迭代器 吗?...技能,我最感兴趣的是他们会如何使用闭包以及如何充分利用异步。...现在看来,惰性求值似乎能连接“如何使用闭包”和“如何充分利用异步”!!

    1.5K20
    领券