函数式编程#3纯函数的概念

news2024/10/6 4:08:45

纯函数的概念

文章目录

  • 纯函数的概念
    • 纯函数的两种形式:
        • 调用目标本身,不会改变
        • 函数内部,不受函数外部影响
    • 函数的副作用
    • 如何理解"相同的输入得到相同的输出"
        • 不是纯函数的映射关系
        • 是纯函数的映射关系

纯函数的两种形式:

调用目标本身,不会改变

slice调用后,数组本身不会被改变,可称为纯函数
splice调用后,数组本身发生改变,不是纯函数

var xs = [1,2,3,4,5];

// 纯的
xs.slice(0,3);
//=> [1,2,3]

xs.slice(0,3);
//=> [1,2,3]

xs.slice(0,3);
//=> [1,2,3]

// 不纯的
xs.splice(0,3);
//=> [1,2,3]

xs.splice(0,3);
//=> [4,5]

xs.splice(0,3);
//=> []

函数内部,不受函数外部影响

当变量min防止函数外界,此时min的值可能会被改变,从而影响函数本身返回的结果,所以不是纯函数;

当变量min放置函数内部,此时变量存在于函数内部,调佣函数整体时,不会被改变,此时函数的返回结果是预期可控的,所以可称为纯函数

通过Object.freeze()可创建,不可更改内部属性的对象

// 不纯的
var min = 21;

var checkAge = function(age) {
  return age >= min;
};
// 纯的
var checkAge = function(age) {
  var min = 21;
  return age >= min;
};

函数的副作用

函数在执行过程中,发生超出预期以外的影响,统称为副作用

纯函数,保证了没有副作用的理念是-“相同的输入得到相同的输出”

如何理解"相同的输入得到相同的输出"

是数学上的映射,是一对一的映射,不是一对多的映射。一个x值只有一个y值与它对应,多个x值可指向同一个y值

不是纯函数的映射关系

请添加图片描述

是纯函数的映射关系

请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gcc编译 与交叉编译(x86 to arm) (一)单个文件编译

1.1、gcc编译单个c程序(hello.c) gcc hello.c -o hello (hello是生成的可执行程序的名字)1.2、交叉编译hello.c 源平台: UOS_X86_64 目标平台:UOS_arm 方法:使用现成的交叉编译工具链 参考资料:交叉编译…

【UE】water插件的简单使用

UE Editor版本:4.26 目录 一、岛屿外观修改 二、波浪参数设置 三、水体海洋的颜色设置 四、 水体河流 五、创建可浮在水体上的actor 一、岛屿外观修改 1. 保证“Landmass”和“Water”插件已启用 启用后,搜索water可以看到如下组件 2. 激活地形编…

LeetCode:6390. 滑动子数组的美丽值

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱6390. 滑动子数组的美丽值 题目描述:给你一个长度为 n 的整…

vulnhub DC:4渗透笔记

靶场下载地址:https://vulnhub.com/entry/dc416-2016,168/ 信息收集 使用nmap确定靶场ip地址 扫描ip确定开放端口 开放22 80端口,访问一下网页端(这边断了一次靶机ip改为192.168.100.138) 漏洞利用 登录框尝试爆破 发现用户名密码admin happy 登录进入后发现这里…

【自然语言处理】【大模型】LaMDA:用于对话应用程序的语言模型

LaMDA:用于对话应用程序的语言模型 《LaMDA: Language Models for Dialog Applications》 论文地址:https://arxiv.org/abs/2201.08239 相关博客 【自然语言处理】【大模型】LaMDA:用于对话应用程序的语言模型 【自然语言处理】【大模型】Dee…

如何衡量 SLO 的有效性?

衡量 SLO 及错误预算策略是否有效,其实就是看实际运行后,是否真的能达到我们的期望。我们可以从下面三个关键维度来看。 SLO 达成情况。我们用达成(Met),或未达成(Missed)来表示。“人肉”投入…

阿里EGES

EGES:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba 阿里的EGES是Graph Embedding的一个经典应用,在内容冷启和物料召回上面有较多的落地潜力。主要思想是根据用户交互的物料作为节点构建物料图,在传统的Dee…

(二)AIGC—Stable Diffusion(2)

越往后,加的噪声越多,逐渐递增 正常的话,类似RNN,前向传递,不利于模型训练。 如果直接从x0到xt最好,DPPM这篇论文就实现了这一目标 beta这一参数在扩散过程是已知的,前期设计好,从0…

从0搭建Vue3组件库(六):前端流程化控制工具gulp的使用

随着前端诸如webpack,rollup,vite的发展,gulp感觉似乎好像被取代了。其实并没有,只不过它从台前退居到了幕后。我们仍然可以在很多项目中看到它的身影,比如elementplus、vant等。现在gulp更多的是做流程化的控制。 比如…

【算法题解】28.子集的递归解法

这是一道 中等难度 的题 题目来自: https://leetcode.cn/problems/subsets/ 题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …

51单片机(二)成功点亮LED

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其实STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

nuxt3 + pinia + swiper +element-plus + less + 腾讯地图 创建项目及使用

一。先说优点 1、基于Vue3: Nuxt3是基于Vue.js 3开发的,Vue.js 3是目前最流行的前端框架之一。 这意味着你可以利用Vue3的所有优势,如性能优化、响应式编程、更好的TypeScript支持等。2、服务端渲染(SSR)&#xff1a…

C++之引用的介绍

目录 前言 引用 1.引用的概念 2.引用特性 3.引用的权限 4. 使用场景 4.1 做参数 4.2 做返回值 5.引用和指针的区别 前言 相信大家都看过水浒传,里面的英雄人物除了自己的名字外都有自己的称号,比如:花和尚——鲁智深,豹…

centOS7.9安装nginx

此示例为安装nginx-1.20.1 (小版本无差别) 安装过程 sftp上传nginx-1.20.1.tar.gz文件到机器(在root目录下) #cd /usr/local/nginx/sbin #./nginx -V (查看版本,如果已经有安装过的话会出现版本号) 切换到loca…

k8s 源码分析 informer篇

之前介绍过informer的流程,文章在 informer介绍。今天梳理一下他的源码和流程。 一、概念 什么是 Informer informer 是 client-go 中的核心工具包,informer 其实就是一个带有本地缓存和索引机制的,可以注册 EventHandler 的 client 本地缓存…

L2-1 堆宝塔

堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下: 首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。把第 1 块彩虹圈…

Linux下使用Mysql 第一天

目录 安装mysql 更改账户名和密码 启动/关闭mysql mysql的基本操作 数据库CURD 创建数据库 查看数据库 修改数据库 删除数据库 表的CURD 创建表 查看表 修改表 删除表 表数据的CURD create数据 Retrieve数据 update数据 delete数据 DML和DDL的区别&#xf…

波形生成:均匀和非均匀时间向量

波形生成—— 脉冲、chirp、VCO、正弦函数、周期性/非周期性和调制信号 使用 chirp 生成线性、二次和对数 chirp。使用 square、rectpuls 和 sawtooth 创建方波、矩形波和三角形波。 如需了解此处未显示的其他无线波形生成功能,请参阅无线波形发生器 (Communicat…

【腾讯云-2】极简搭建边缘集群

1 创建 流程和https://blog.csdn.net/qq_47058489/article/details/130347795差不多,可参考 查看基本信息: 创建边缘集群的过程中会初始化master,说明包含一个托管master节点 但是没有其他节点 2 开启节点远程登录 通过 SSH 的方式远…

JavaScript模块化开发

目录: 1 认识模块化开发 2 CommonJS和Node 3 require函数解析 4 AMD和CMD(了解) 5 ESModule用法详解 6 ESModule运行原理 模块化不是两个不同的js文件直接导入到某个页面中的,因为这两个文件只要有相同的变量或函数&#xf…