当前位置: 首页 > news >正文

Elixir学习笔记——速构(函数式编程基础)

在 Elixir 中,循环遍历 Enumerable 是很常见的,通常会过滤掉一些结果并将值映射到另一个列表中。
速构是此类构造的语法糖:它们将这些常见任务分组为 for 特殊形式。

例如,我们可以将一串整数映射到它们的平方值:

速构由三部分组成:生成器、过滤器和可收集物。

生成器和过滤器

在上面的表达式中,n <- [1, 2, 3, 4] 是生成器。它实际上是生成要在速构中使用的值。任何可枚举项都可以传递到生成器表达式的右侧:

生成器表达式还支持在其左侧进行模式匹配;所有不匹配的模式都将被忽略。想象一下,我们有一个关键字列表,而不是一个范围,其中的键是原子 :good 或 :bad,我们只想计算 :good 值的平方:

除了模式匹配,还可以使用过滤器来选择某些特定元素。例如,我们可以选择 3 的倍数并丢弃所有其他元素:

速构会丢弃过滤器表达式返回 false 或 nil 的所有元素;选择所有其他值。

与使用 Enum 和 Stream 模块中的等效函数相比,速构通常提供更简洁的表示。此外,速构还允许给出多个生成器和过滤器。下面是一个接收目录列表并获取这些目录中每个文件的大小的示例:

还可以使用多个生成器来计算两个列表的笛卡尔积:

最后,请记住,速构中的变量赋值(无论是在生成器、过滤器中还是在块内)都不会反映在速构之外。

位串生成器

位串生成器也受支持,当您需要速构位串流时,它非常有用。下面的示例从二进制文件中接收像素列表,其中包含各自的红色、绿色和蓝色值,并将它们转换为每个包含三个元素的元组:

位串生成器可以与“常规”可枚举生成器混合使用,并且还支持过滤器。

:into 选项

在上面的例子中,所有推导都返回列表作为其结果。但是,通过将 :into 选项传递给推导,可以将推导的结果插入到不同的数据结构中。

例如,可以将位串生成器与 :into 选项一起使用,以便轻松删除字符串中的所有空格:

还可以将集合、映射和其他字典提供给 :into 选项。一般来说,:into 接受任何实现 Collectable 协议的结构。

:into 的一个常见用例是转换映射中的值:

让我们使用流再举一个例子。由于 IO 模块提供了流(既是 Enumerable 又是 Collectable),因此可以使用推导实现一个回显终端,该终端会回显输入内容的大写版本:

现在在终端中输入任何字符串,您将看到相同的值将以大写形式打印。不幸的是,这个例子也让你的 IEx shell 陷入了速构阶段,所以你需要按两次 Ctrl+C 才能退出。

相关文章:

Elixir学习笔记——速构(函数式编程基础)

在 Elixir 中&#xff0c;循环遍历 Enumerable 是很常见的&#xff0c;通常会过滤掉一些结果并将值映射到另一个列表中。 速构是此类构造的语法糖&#xff1a;它们将这些常见任务分组为 for 特殊形式。 例如&#xff0c;我们可以将一串整数映射到它们的平方值&#xff1a; 速构…...

开源项目大合集(热门)

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…...

【JVM】JVisualVM的介绍、使用和GC过程

VisualVM介绍 VisualVM 是Netbeans的profile子项目&#xff0c;已在JDK6.0 update 7 中自带&#xff0c;能够监控线程&#xff0c;内存情况&#xff0c;查看方法的CPU时间和内存中的对 象&#xff0c;已被GC的对象&#xff0c;反向查看分配的堆栈(如100个String对象分别由哪几…...

个人在家如何获取World Scientific文献的经验分享

今天有位同学求助一篇World Scientific文献&#xff0c;他的学校虽然有这个数据库&#xff0c;但订购的该数据库资源内容有限&#xff0c;这位同学所需的文献不在学校订购范围内所以下载不了。今天小编就分享一个在家就可获取各个数据库文献的方法。本文以这篇求助文献为例&…...

Java 收集常见面试题

set和list的区别&#xff1f;给定一系列字符串&#xff0c;从集合的set和list中查询&#xff0c;如何查询出相关的数据&#xff1f; 在Java中&#xff0c;Set和List都是用于存储对象的集合 Set&#xff1a; 不允许包含重复的元素。 没有顺序&#xff08;即不保证元素的迭代顺序…...

JS 严格模式和正常模式的区别

严格模式使用"use strict"; 作用&#xff1a; 消除 Javascript 语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为;消除代码运行的一些不安全之处&#xff0c;保证代码运行的安全&#xff1b;提高编译器效率&#xff0c;增加运行速度&#xff1b;为未来新…...

9种编程语言的对比分析

在当今的软件开发领域&#xff0c;编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景&#xff0c;选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析&#xff0c;帮助读者了解它们的优缺点和适用场景。 Java 特点&…...

模拟14位相机输出Verilog代码

1 代码 `timescale 1ns / 1psmodule simulate_camera_out (input clk,input rest_n,output camera_clk, //像素时钟output [13:0] camera_data, //像素值数据output [19:0] pixel_xy, //此时输出的像素值坐标output reg frame_valid //帧有效信号,1代表帧有效0代表帧无效…...

Linux远程访问及控制

SSH远程管理 SSH(Secure Shell)是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令。与早期的 Telent(远程登录)、RSH(Remote Shell&#xff0c;远程执…...

归并排序个人见解

归并排序个人见解 思路实现代码实现题目 思路实现 归并排序属于分治算法&#xff0c;分治算法有三个步骤&#xff1a; 分&#xff1a;将问题划分为多个规模较小的子问题&#xff0c;这些子问题与原始问题相似。治&#xff1a;递归地解决这些子问题。如果子问题足够小&#xf…...

软考初级网络管理员__网络单选题

1.观察交换机状态指示灯初步判断交换机故障&#xff0c;交换机运行中指示灯显示红色表示()。 警告 正常 待机 繁忙 2.通常测试网络连通性采用的命令是()。 Netstat Ping Msconfig Cmd 3.一台16端口的交换机可以产生&#xff08;&#xff09;个冲突域? 1 4 15 16…...

22.2 正则表达式-数据验证、数据变换

1. 数据验证 正则表达可用于验证文本是否满足某种给定的模式。 正则表达式也是一种语言&#xff0c;因此在使用之前必须先对其进行编译&#xff0c;并将编译结果保存在一个Regexp类型的变量里。以下两个函数即返回该变量的指针。 re, err : regexp.Compile("^[a-zA-Z0-…...

示例:WPF中应用DataGrid读取实体DisplayAttribute特性自动自动生成列名

一、目的&#xff1a;通过重写DataGrid的OnAutoGeneratingColumn方法实现根据定义特性自动生成列头信息功能 二、实现 <DataGrid ItemsSource"{local:GetStudents Count50}"/>实体定义如下 public class Student{[DataGridColumn("*")][Display(Na…...

八股文之JVM

目录 1.JVM内存划分 2.JVM类加载过程 3.JVM垃圾回收机制GC 3.1.判断谁是垃圾 3.2.如何释放对应的内存 1.JVM内存划分 在一个Java程序运行起来之后&#xff0c;jvm就会从操作系统中申请一块内存&#xff0c;然后就会将该内存划分成多个部分&#xff0c;用于不同的用途。 …...

给wordpress添加限制游客浏览数量功能

wordpress游客只可以浏览5个内容&#xff0c;其它更多的是的需要注册后才能浏览。以下是使用自定义代码来实现这一功能的基本步骤&#xff1a; 创建一个自定义角色&#xff1a; 使用wp_create_roles函数来创建一个名为“访客”的新角色。 该角色将只具有阅读权限。 限制文章…...

[二分枚举]特殊密码锁

描述 有一种特殊的二进制密码锁&#xff0c;由n个相连的按钮组成&#xff08;n<30&#xff09;&#xff0c;按钮有凹/凸两种状态&#xff0c;用手按按钮会改变其状态。 然而让人头疼的是&#xff0c;当你按一个按钮时&#xff0c;跟它相邻的两个按钮状态也会反转。当然&am…...

MT1434 找数字

题目 输入一个字符串(包含26个英文字母大小写及 . 空格&#xff0c;不含其他字符)&#xff0c;把其中连续的数字作为一个整数&#xff0c;依次存放到一个数组中&#xff0c;输出这些整数的和。 格式 输入格式 输入字符串 输出格式 输出整型 样例1 输入&#xff1a; a12…...

2024年6月四六级考试复盘

一、考试情况 1.1四级考试情况 听力&#xff1a;一开始没有进入状态。总共对了9道。7.1*37.1*314.2*3 8.2 新闻听力&#xff1a;3/7 长对话&#xff1a;3/8 讲座/讲话&#xff1a;3/10 阅读&#xff1a;3.55*7 7.1*8 14.2 * 7 181.05 选词填空&#xff1a;保守估计7/1…...

join和left join性能比较

1、join和left join性能比较&#xff08;AI生成&#xff09; 在MySQL中&#xff0c;JOIN和LEFT JOIN的效率并不是绝对的&#xff0c;它们之间的性能差异取决于多种因素&#xff0c;如表的大小、使用的索引、查询的复杂性等。 一般来说&#xff1a; 如果两个表之间的连接条件能…...

Qt正则表达式

需求&#xff1a;对输入的内容进行限制 只能以字母或下划线开始不能以数字开始 不能有中文 字母&#xff0c;数字&#xff0c;下划线混合使用 QRegExp rx("^[A-Za-z_][A-Za-z0-9_]*$");QRegExpValidator validator(rx);QLineEdit edit;edit.setValidator(&va…...

排序-快排算法对数组进行排序

目录 一、问题描述 二、解题思路 1.初始化 2.将右侧小于基准元素移到左边 3.将左侧大于基准元素移到右边 4.重复执行上面的操作 5.对分好的左、右分区再次执行分区操作 6.最终排序结果 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 快排算法实现数组排序&am…...

flink学习-容错机制

checkpoint&#xff08;检查点&#xff09; 在flink中最重要的容错机制&#xff0c;就是checkpoint机制&#xff0c;使用checkpoint可以将之前某个时间点的所有的状态进行保存&#xff0c;这个存档就是checkpoint。 检查点的保存 周期性存储保存&#xff0c;间隔时间可以由用…...

InfluxDB技术分享

InfluxDB是一个开源的时间序列数据库&#xff0c;它被设计用来处理高速写入和查询大量的时间序列数据。以下是一份关于“InfluxDB在Java开发中的使用”的三十分钟技术分享内容概要&#xff1a; 1. 引言 (2分钟) 介绍时间序列数据和时间序列数据库的概念。引入InfluxDB的特点和…...

Windows10安装配置Docker客户端和WSL2与Hyper-V虚拟机

一、需求说明 需要在Windows系统中安装配置Docker的客户端,方便直接管理配置docker镜像容器内容。 二、Windows10安装Docker客户端步骤 2.1、下载安装Docker客户端 对于Windows 10以下的用户,推荐使用Docker Toolbox Windows安装文件:http://mirrors.aliyun.com/docker-…...

EIQ-ABC 分析法在配送中心储位分配中的应用

配送中心运作效率的高低主要取决于仓储业务流程的作业效率&#xff0c;在配送作业流程中&#xff0c;储位分配的是否合理性成为影响配送运作效率的重要因素。为实现储位的合理分配&#xff0c;提出通过对订单信息的分析&#xff0c;并应用 EIQ-ABC 分析法&#xff0c;以此实现缩…...

【安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试】

安装笔记-系列文章目录 安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 文章目录 安装笔记-系列文章目录安装笔记-20240613-Linux-在 OpenWrt 的 LuCI界面支持命令行调试 前言一、软件介绍名称&#xff1a;ttyd主页官方介绍特点 二、安装步骤测试版本&#xf…...

React小记(一)_基础部分

1、项目搭建与结构 2、类组件和函数组件 主要区别&#xff1a;1、函数组件没有生命周期2、函数组件没有this指向3、函数组件没有状态4、函数组件通过hooks实现各种操作5、props在函数的第一个参数接收6、函数体相当于类组件的render函数import React from reactfunction App()…...

40、基于深度学习的线性预测设计(matlab)

1、原理及流程 深度学习的线性预测是一种利用深度神经网络模型进行线性回归预测的方法。其设计原理主要基于神经网络的层次化特性&#xff0c;利用多层感知器&#xff08;MLP&#xff09;等模型进行特征学习和非线性变换&#xff0c;从而提高线性预测的准确性。 设计流程如下…...

【初体验 threejs】【学习】【笔记】hello,正方体 3!

前言 为了满足工作需求&#xff0c;我已着手学习 Three.js&#xff0c;并决定详细记录这一学习过程。在此旅程中&#xff0c;如果出现理解偏差或有其他更佳的学习方法&#xff0c;请大家不吝赐教&#xff0c;在评论区给予指正或分享您的宝贵建议&#xff0c;我将不胜感激。 项…...

第04章:IDEA的安装与使用

第04章&#xff1a;随堂复习与企业真题&#xff08;IDEA安装与使用&#xff09; 一、随堂复习 1. IDEA的认识 IDEA(集成功能强大、符合人体工程学&#xff08;设置人性化&#xff09;)Eclipse 2. IDEA的下载、安装、卸载 卸载&#xff1a;使用控制面板进行卸载&#xff0c;…...

网站里面的视频功能怎么做/产品营销策略有哪些

作者在开始讲正文之前先对读者做了一个小测验&#xff1a;换一个灯泡需要多少个程序员&#xff1f;(貌似换灯泡跟程序员关系不大&#xff09;&#xff0c;可能有三种答案&#xff1a; 1.根本不需要&#xff0c;因为灯泡根本没坏。 2.仅仅需要一名&#xff0c;但是需要耗费一整…...

oa系统的概念/谷歌seo外包

添加多台压力机1、前置条件1&#xff09;保证压力机上都安装了loadrunner Agent&#xff0c;并启动&#xff0c;状态栏中会有小卫星。2&#xff09;添加的压力机与controller所在机器是否在同一个网段&#xff0c;建议关闭防火墙。在controller压力机上 ping 下连接压力机&…...

做网站维护怎么找客户/百度知道答题赚钱

动态内存是一个有用的功能&#xff0c;但在配置虚拟机和主机服务器时&#xff0c;必须小心谨慎。谈及承载虚拟工作负载&#xff0c;硬件资源对整体性能的重要性可能不如物理内存。以确保每台虚拟机都具有所需内存且不会浪费进程中的内存的方式分配内存非常重要。下面是分配供 M…...

怎么进入网站后台图片/重庆百度seo整站优化

数据库领域公认的标准结构是三级模式结构&#xff0c;它包括外模式、模式和内模式&#xff0c;有效地组织、管理数据&#xff0c;提高了数据库的逻辑独立性和物理独立性。用户级对应外模式&#xff0c;概念级对应模式&#xff0c;物理级对应内模式&#xff0c;使不同级别的用户…...

汉南网站建设/最新中国新闻

class Solution { public:vector<int> decode(vector<int>& encoded, int first) {int n encoded.size();vector<int> res(n 1);res[0] first;for(int i 1; i < n; i) {res[i] encoded[i - 1] ^ res[i - 1];}return res;} };...

wordpress和teakki/中国百强城市榜单

经常碰到32位的DLL什么的不能在64位Windows的IIS上调用&#xff0c;在网上找到这篇文章也许能够解决很多问题。总的思路就是先允许IIS支持32位程序&#xff0c;然后再用.Net Framework注册IIS。Enable 32-bit Server Applications on 64-bit MachinesASP.NET applications that…...