首页 > 编程语言 >实用"函数式"编程范式

实用"函数式"编程范式

时间:2023-11-19 19:45:27浏览次数:46  
标签:__ ... 范式 函数 代码 编程 实用 struct

实用"函数式"编程范式

通常说函数式编程,可能就会提到 map / reduce, 或者函数编程语言,例如 lisp, Haskell 等。

我以前读过一篇文章,具体链接找不到了,作者的观点是函数式编程具体体现在通过函数编程可以直观得看到逻辑调用链条之间的关系。

例如下面这段代码:

p = a(
	b,
	c,
	d,
	e(
		f,
		g
	)
)

p(arg1, arg2, ..., argn)

这个代码片段,表明了整个程序是如何组织在一起,p程序通过将一组函数a,b,c,d,e,f,g 有层次的组合在一起,构成了程序p,最后一次性调用程序p。这样我们就可以在局部直观地看到逻辑模块的组织关系。

如果非常严格的写下去,就会是函数式编程语言的那种代码风格,例如 scheme。对于写命令式编程、OOP编程语言来说这不切实际,但是可以在局部做到这点。例如在C里面把a、b、c、d、e、f、g函数都实现了后,实际的代码组织放在一起:


void run(){
	e(f(), g());

	d();
	c();
	b();

	a();
}

这样实际上看到的是命令式代码,但是至少做到了在run里面局部把逻辑模块的层次依赖组织好。

如果在面向对象语言里,则可能是这样的:

struct T{
	void run(){
		this.e(this.f(), this.g();
		this.d();
		this.c();
		this.b();
	}
}

此外对于C++,可以通过函数对象的方式来把类看成一个函数来用:

struct E{
	operator()(){
		
	}
}

struct F{
	operator()(){
		
	}
}
...


p = A(B(),C(),D(),E(F(), G());
p(...);

在Python里面也可以这样做:

class E:
	def __init(self):
		...

	def __call__(self):
		...

...

p = A(B(),C(),D(),E(F(), G());
p(...);

简单来说,实用函数式编程记住两点:

  1. 可以通过语言的仿函数能力,将对象转成函数
  2. 组合函数对象,清晰表达出逻辑模块的组装
  3. 一次性执行组合程序

--end--

标签:__,...,范式,函数,代码,编程,实用,struct
From: https://www.cnblogs.com/math/p/practical-functional-program.html

相关文章

  • 探索CodeFuse:AI助力编程效率的新高度
    引言在人工智能与软件开发的交汇点,CodeFuse以其独树一帜的技术实力和应用广度,正引领着一场编程界的AI革命。作为蚂蚁集团自研的代码生成模型,CodeFuse不仅在多语言编程支持、代码生成和优化方面展现出卓越性能,而且在提升开发效率、降低编程门槛方面具有革命性意义。CodeFuse技术深度......
  • Java是一种高级编程语言,
    Java是一种高级编程语言,由SunMicrosystems(后来被Oracle收购)的詹姆斯·高斯林(JamesGosling)等人开发。Java的设计目标是实现“一次编写,随处运行”的理念,即通过一次编写程序,可以在多个平台上运行,而无需对程序进行修改。Java的发展可以追溯到20世纪90年代初。在当时,Sun公司致力于开......
  • 熟悉编程语言
    最受欢迎top20编程语言编程泛型编程泛型是一种在编程语言中使用的技朋,它允许我们编写可以适用于多种不同类型的数据的代码。通过使用泛型,我们可以编写更加灵活和通用的代码,而不需要针对每种特定的数据类型编写不同的代码。在使用泛型时,我们可以定义一个通用的数据类型或函数,然......
  • 熟悉编程语言
    一、TIOBE开发语言排行榜TIOBE开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程度的有效指标。该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言......
  • 使用 ChatGPT 帮助小学生编程入门系列之二:使用 Python 编程发送电子邮件
    本系列前一篇文章,我们已经介绍了如何使用Python编写一段代码,将搜索引擎上找到的天气预报网站上的信息,读取到本地:使用ChatGPT帮助小学生编程入门系列之一:Python编程读取和解析天气预报网页上的数据本文我们再进一步,目标是把一段文本,通过Python发送到指定的邮箱去。学会......
  • 函数式+泛型编程:编写简洁可复用的代码
    WriteLessDoMore.引子我个人比较信奉的一句编程箴言:WriteLessandDoMore。无论是出于懒,还是出于酷炫的编程技艺,或者是一种编程乐趣。函数式和泛型编程是编写简洁可复用代码的两大编程技艺,组合起来威力更加强大。另一项技艺是元编程。本文主要来讲讲函数式和泛型编程。......
  • 使用 ChatGPT 帮助小学生编程入门系列之一:Python 编程读取和解析天气预报网页上的数据
    现在国内小学生也开设了信息技术课,课程内容也涉及到了一些简单的编程实践,比如Scratch和Python.当初这个公众号申请时专门用了我儿子的名字,算是抢注吧,毕竟微信公众号和其他社交媒体平台不一样,不允许重名。我也曾经和我儿子聊过,我今年都40多岁了,这个公众号将来迟早有一天会正......
  • 小学四则运算编程实践(选做)
    从《构建之法》第一章的“程序”例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行“软件”,满足以下需求:(以下参考博客链接:http://www.cnblogs.com/jiel/p/4810756.html)include<stdio.h>include<stdlib.h>include<time.h>voidgenerate_arithmetic......
  • 【教3妹学编程-java基础6】详解父子类变量、代码块、构造函数执行顺序
    -----------------第二天------------------------本文先论述父子类变量、代码块、构造函数执行顺序的结论,然后通过举例论证,接着再扩展,彻底搞懂静态代码块、动态代码块、构造函数、父子类、类加载机制等知识体系。温故而知新,建议点赞收藏~ 1先说结论 面试官:好的,你说一下java中父......
  • 【教3妹学编程-算法题】三个无重叠子数组的最大和
    2哥 :3妹,咋啦?一副苦大仇深的样子?3妹:不开心呀不开心,羽生结弦宣布离婚。2哥 :羽生什么?3妹:羽生结弦!2哥 :什么结弦?3妹:羽生结弦!!!2哥:羽生结弦是谁?他离婚关你啥事啊?3妹:你不知道,他是日本著名花滑运动员,前几个月刚宣布结婚,没想到这么快就离了。真是短时间内震惊我两次!2哥 :哎,人家怎......