IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> scheme let and lambda -> 正文阅读

[Python知识库]scheme let and lambda

#lang racket

;;https://www.scheme.com/tspl4/start.html#./start:h4
(let ((x 2))
  (+ x 3))

(let ((y 3))
  (+ 2 y))

(let ((x 2) (y 3))
  (+ x y))

;(let ((var expr) ...) body1 body2 ...)

(+ (* 4 4) (* 4 4))

(let ((a (* 4 4)))
  (+ a a))

;中括号经常被用于绑定一个let表达式
(let ([list1 '(a b c)]
      [list2 '(d e f)])
  (cons (cons (car list1)
              (car list2))
        (cons (car (cdr list1))
              (car (cdr list2)))));构造两个pair而不是两个list

;用于绑定函数
(let ([f +])
  (f 2 3))

(let ([f +] [x 2])
  (f x 3)) 

(let ([f +] [x 2] [y 3])
  (f x y))

;let的绑定仅在let体内可见
(let ([+ *])
  (+ 2 3))

(+ 2 3)

;嵌套let
(let ([a 4] [b -3])
  (let ([a-squared (* a a)]
        [b-squared (* b b)])
    (+ a-squared b-squared)))

;嵌套的let,body体中,只有inner的let绑定可见
;The inner binding for x is said to shadow the outer binding
(let ([x 1])
  (let ([x (+ x 1)])
    (+ x x)))

;Shadowing may be avoided by choosing different names for variables
(let ([x 1])
  (let ([new-x (+ x 1)])
    (+ new-x new-x)))


;(+ (- (* 3 a) b) (+ (* 3 a) b))
;(let ([*3a (* 3 a)])
;  (+ (- *3a b)
;     (+ *3a b)))

(cons (car (list 'a 'b 'c)) (cdr (list 'a 'b 'c)))
(let ([l (list 'a 'b 'c)])
  (cons (car l)
        (cdr l)))

(let ([x 9])
  (* x
     (let ([x (/ x 3)])
       (+ x x))))


	
(let ([x 'a] [y 'b])
  (list (let ([x 'c]) (cons x y))
        (let ([y 'd]) (cons x y))))

(let ([x 'a] [y 'b])
  (list (let ([new-x 'c]) (cons new-x y))
        (let ([new-y 'd]) (cons x new-y))))

	
(let ([x '((a b) c)])
  (cons (let ([x (cdr x)])
          (car x))
        (let ([x (car x)])
          (cons (let ([x (cdr x)])
                  (car x))
                (cons (let ([x (car x)])
                        x)
                      (cdr x))))))

(let ([x '((a b) c)])
  (cons (let ([new-x (cdr x)])
          (car new-x))
        (let ([new-x2 (car x)])
          (cons (let ([new-x3 (cdr new-x2)])
                  (car new-x3))
                (cons (let ([new-x4 (car new-x2)])
                        new-x4)
                      (cdr new-x2))))))

;lambda
(lambda (x) (+ x x))

;(lambda (var ...) body1 body2 ...)

((lambda (x) (+ x x)) (* 3 4))

;将一个lambda绑定到一个变量上
(let ([double (lambda (x) (+ x x))])
  (list (double (* 3 4))
        (double (/ 99 11))
        (double (- 2 7))))

(let ([double-cons (lambda (x) (cons x x))])
  (double-cons 'a))

;they may be collapsed into a single procedure by adding an additional argument
;参数压缩
(let ([double-any (lambda (f x) (f x x))])
  (list (double-any + 13)
        (double-any cons 'a)))

;lambda和let互相嵌套
(let ([x 'a])
  (let ([f (lambda (y) (list x y))])
    (f 'b)))


;The answer is that the same bindings that were in effect when the procedure was created are in effect again when the procedure is applied
;创建过程时生效的绑定在应用过程时再次生效
(let ([f (let ([x 'sam])
           (lambda (y z) (list x y z)))])
  (f 'i 'am))

(let ([f (let ([x 'sam])
           (lambda (y z) (list x y z)))])
  (let ([x 'not-sam])
    (f 'i 'am)))

;lambda 参数
;x没有被()包裹,则x为一个list
;all of the actual parameters are put into a single list and the single variable is bound to this list.
;In the first two examples, the procedure named f accepts any number of arguments.
;These arguments are automatically formed into a list to which the variable x is bound
(let ([f (lambda x x)])
  (f 1 2 3 4)) 

(let ([f (lambda x x)])
  (f))

;y为一个list
(let ([g (lambda (x . y) (list x y))])
  (g 1 2 3 4))

;z为一个list
(let ([h (lambda (x y . z) (list x y z))])
  (h 'a 'b 'c 'd))

(let ([f (lambda (x) x)])
  (f 'a))

(let ([f (lambda x x)])
  (f 'a))

(let ([f (lambda (x . y) x)])
  (f 'a))

(let ([f (lambda (x . y) y)])
  (f 'a))

(lambda (f x) (f x))

(lambda (x) (+ x x))

;f: unbound identifier in: f
;(lambda (x y) (f x y))

	
(lambda (x)
  (cons x (f x y)))









  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:00:43  更:2022-01-16 13:02:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:21:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码