通过Lambda表达式表示复合过程 SICP

通过Lambda表达式表示复合过程。

Code

#lang racket
(define(square x)
  (* x x))
;求和记法定义程序模式
(define(sum term a next b)
  (if(> a b)
      0
      (+(term a)
         (sum term (next a) next b))))
 
;使用lambda表达式构造匿名函数
(lambda(x)(+ x 4))
(lambda(x)(/1.0(* x (+ x 2))))
;使用lambda构造pi-sum过程
(define(pi-sum a b)
  (sum (lambda(x)(/1.0(* x (+ x 2))))
  a
  (lambda(x)(+ x 4))
  b))
;使用lambda构造integral过程
(define(integral f a b dx)
  (*(sum f
          (+ a (/ dx 2.0))
          (lambda(x)(+ x dx))
          b)
     dx))
;使用lambda作为组合式计算
((lambda(x y z)(+ x y (square z)))123)
;Test
(pi-sum 212)

时间: 2024-12-07 03:03:22

通过Lambda表达式表示复合过程 SICP的相关文章

个人理解的Lambda表达式的演化过程

之前在组内进行过相关分享,为防止以后再单独整理,故在此将自己的PPT内容存放下. 委托 什么是委托? 定义:委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址.调用委托的时候,委托包含的所有方法将被执行. (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型. (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象. 个人理解:将方法作为参数进行传递 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 代码做减法 定义委托,很多时候签名(参数与返回值类型

lambda表达式之进化

前言 在C#我们可以自定义委托,但是C#为什么还要内置泛型委托呢?因为我们常常要使用委托,如果系统内置了一些你可能会用到的委托,那么就省去了定义委托,然后实例化委托的步骤,这样一来既使代码看起来简洁而干净又能提高程序员的开发速度,何乐不为呢!通过本文可以让你复习扩展方法,同时可以循序渐进的了解系统内置泛型委托的实现以及委托逐步的演化过程. Action 概念:封装一个方法,该方法具有五个参数并且不返回值.并且类型参数为逆变 下面我就自定义实现一个Action<T>无返回值的委托.我们同样定义一

理解Lambda表达式和闭包

了解由函数指针到Lambda表达式的演化过程 Lambda表达式的这种简洁的语法并不是什么古老的秘法,因为它并不难以理解(难以理解的代码只有一个目的,那就是吓唬程序员) 1 #include "stdafx.h" 2 using namespace System; 3 4 typedef void(*FunctionPointer)(System::String ^str); 5 6 void HelloWorld(System::String ^str) 7 { 8 Console:

行为参数化与lambda表达式 - 读《Java 8实战》

零. 概述 第一部分:1~3章 主要讲了行为参数化和Lambda表达式 第二部分:4~7章 主要讲了流的应用,包括流与集合差异,流的操作,收集器,注的并行执行 第三部分:8~12章 主要讲了怎样用Java8引入的特性改善老代码,Optional类和CompleteFuture及新的日期和时间API 第四部分:13~16章 主要讲了函数式编程 本文主要是对第一部分的笔记. 一.行为参数化 1.1 行为参数化定义 行为参数化就是拿出一个代码块,把它准备好却不去执行它. 1.2 举例:需求 有个果农,

C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Linq.Expressions; namespace INPEXOne.LearnCS { class RefletLambdaDelegate { static object[] para

从匿名方法到 Lambda 表达式的推演过程

Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式的描述.实质上Lambda 表达式可以说是从匿名方法推演而来,微软程序员为了提高我们广大程序员的生产效率推出了Lambda 表达式,它的出现无疑是极具影响力的. Lambda 表达式使用Lambda 运算符=>,我们一般读作“goes to”,当然这并不是说它跟C#中的goto有相同的含义,只是都有

复合Lambda表达式

import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; /** * 复合Lambda表达式 */ public class Demo { public static <T> List<T>

Lambda表达式——注重过程的编程思想

一.使用匿名内部类的匿名对象创建线程和Lambda表达式写法 Lambda表达式写法不用去定义一个Runable接口的实现类: 二.方法入参是一个接口或者接口的实现类 三.对某个类的一些对象实例进行排序 其中,数组创建时候使用的是静态初始化,里面存放的对象是匿名对象: Lambda表达式写法: 四.计算两数和,方法的入参是一个接口 五.Lambda表达式写法上下文可推导可省略 入参列表有且只有一个:参数列表的括号可以省略(参数列表中参数的类型所有情况下都可以省略) 方法体只有一行代码:方法体花括

Scheme中lambda表达式与函数指针小例

SICP/Chapter2/Exercise-2.4 Lambda表达式语法 (lambda kw-formals body) 题目描述 用过程性表示方式重写序对的cons.car.cdr Scheme代码 (define (cons-24 x y) (lambda (m) (m x y))) (define (car-24 z) (z (lambda (p q) p))) 这段代码只有4行,但是逻辑关系并不好理解. 原因在于函数式语言的自顶向下实现方式不符合一般的逻辑习惯. lambda以类似