[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

Scheme 函数式编程:基本符号

本帖最后由 老刘1号 于 2024-3-16 21:52 编辑

《函数程序设计算法》读书笔记。

简单值
  1. #t
复制代码
  1. #t
复制代码
  1. #f
复制代码
  1. #f
复制代码
  1. #\M
复制代码
  1. #\M
复制代码
  1. #\newline
复制代码
  1. #\newline
复制代码
  1. #\nul
复制代码
  1. #\nul
复制代码
  1. "sample"
复制代码
  1. "sample"
复制代码
  1. "\"Hi\""
复制代码
  1. ""Hi""
复制代码
  1. "\\A\\"
复制代码
  1. "\A\"
复制代码
  1. 'midnight-blue
复制代码
  1. 'midnight-blue
复制代码
  1. (quote midnight-blue)
复制代码
  1. 'midnight-blue
复制代码


算术函数
  1. (+)
复制代码
  1. 0
复制代码
  1. (+ 1 2 3 4 5)
复制代码
  1. 15
复制代码
  1. (- 1)
复制代码
  1. -1
复制代码
  1. (- 2 1)
复制代码
  1. 1
复制代码
  1. (- 1 2 3)
复制代码
  1. -4
复制代码
  1. (*)
复制代码
  1. 1
复制代码
  1. (* 2 3 4)
复制代码
  1. 24
复制代码
  1. 3/1
复制代码
  1. 3
复制代码
  1. (/ 3 1)
复制代码
  1. 3
复制代码
  1. (/ 3 2)
复制代码
  1. 3/2
复制代码
  1. (= 3/1 (/ 3 1))
复制代码
  1. #t
复制代码
  1. (/ 5)
复制代码
  1. 1/5
复制代码
  1. (expt 3 4)
复制代码
  1. 81
复制代码
  1. (expt 3 0)
复制代码
  1. 1
复制代码
  1. (expt 0 0)
复制代码
  1. 1
复制代码


Lambda 表达式
  1. (lambda (x y)
  2.   (/ (+ x y) 2))
复制代码
  1. #<procedure>
复制代码
  1. ((lambda (x y)
  2.   (/ (+ x y) 2)) 3/5 11/3)
复制代码
  1. 32/15
复制代码

变元过程
  1. (lambda nums
  2.   (/ (apply + nums) (apply * nums)))
复制代码
  1. #<procedure>
复制代码
  1. ((lambda nums
  2.   (/ (apply + nums) (apply * nums))) 3 5 8 2 6)
复制代码
  1. 1/60
复制代码
  1. (lambda nums
  2.   (apply + 23 14 6 nums))
复制代码
  1. #<procedure>
复制代码
  1. ((lambda (x y z . others)
  2.   (* (+ x y z) (apply + others))) 1 2 3 3 4 5)
复制代码
  1. 72
复制代码

构造列表
  1. (list 3 8 7)
复制代码
  1. '(3 8 7)
复制代码
  1. (list)
复制代码
  1. '()
复制代码

返回多个值
  1. values
复制代码
  1. #<procedure:values>
复制代码
  1. (lambda nums
  2.   (values (apply + nums) (apply * nums)))
复制代码
  1. #<procedure>
复制代码
  1. ((lambda nums
  2.   (values (apply + nums) (apply * nums))) 1 2 3 4 5)
复制代码
  1. 15
复制代码
  1. 120
复制代码
  1. (define delist (lambda (ls)
  2.   (apply values ls)))
复制代码
  1. (delist (list 1 2 3 4 5))
复制代码
  1. 1
复制代码
  1. 2
复制代码
  1. 3
复制代码
  1. 4
复制代码
  1. 5
复制代码

谓词
  1. (even? 2)
复制代码
  1. #t
复制代码
  1. (even? 3)
复制代码
  1. #f
复制代码
  1. (< 3 4)
复制代码
  1. #t
复制代码
  1. (< 4 3)
复制代码
  1. #f
复制代码
  1. (values <= = > >=)
复制代码
  1. #<procedure:<=>
复制代码
  1. #<procedure:=>
复制代码
  1. #<procedure:>>
复制代码
  1. #<procedure:>=>
复制代码
  1. (boolean? #f)
复制代码
  1. #t
复制代码
  1. (boolean? 0)
复制代码
  1. #f
复制代码
  1. (number? 0)
复制代码
  1. #t
复制代码
  1. (integer? 1)
复制代码
  1. #t
复制代码
  1. (integer? 1/2)
复制代码
  1. #f
复制代码
  1. (char? #\newline)
复制代码
  1. #t
复制代码
  1. (char? 'newline)
复制代码
  1. #f
复制代码
  1. (symbol? 'newline)
复制代码
  1. #t
复制代码
  1. (symbol? "newline")
复制代码
  1. #f
复制代码
  1. (string? "newline")
复制代码
  1. #t
复制代码
  1. (procedure? +)
复制代码
  1. #t
复制代码
  1. (procedure? (lambda (x) (+ x 1)))
复制代码
  1. #t
复制代码
  1. (equal? #t #t)
复制代码
  1. #t
复制代码
  1. (equal? + +)
复制代码
  1. #t
复制代码
  1. (equal? 3/1 3)
复制代码
  1. #t
复制代码
  1. (equal? (lambda (x) x) (lambda (x) x))
复制代码
  1. #f
复制代码
  1. (values zero? positive? negative? even? odd?)
复制代码
  1. #<procedure:zero?>
复制代码
  1. #<procedure:positive?>
复制代码
  1. #<procedure:negative?>
复制代码
  1. #<procedure:even?>
复制代码
  1. #<procedure:odd?>
复制代码

条件类型表达式
  1. (if (= (+ 1 1) 2) 'eq 'neq)
复制代码
  1. 'eq
复制代码
  1. (if (= (+ 1 1) 3) 'eq 'neq)
复制代码
  1. 'neq
复制代码
  1. (and #t #t)
复制代码
  1. #t
复制代码
  1. (and #t #f)
复制代码
  1. #f
复制代码
  1. (and #f #f)
复制代码
  1. #f
复制代码
  1. (or #t #t)
复制代码
  1. #t
复制代码
  1. (or #t #f)
复制代码
  1. #t
复制代码
  1. (or #f #f)
复制代码
  1. #f
复制代码
  1. (and (= (+ 1 1) 2) 'eq)
复制代码
  1. 'eq
复制代码
  1. (and (= (+ 1 1) 3) 'eq)
复制代码
  1. #f
复制代码
  1. (or (= (+ 1 1) 2) 'eq)
复制代码
  1. #t
复制代码
  1. (or (= (+ 1 1) 3) 'neq)
复制代码
  1. 'neq
复制代码

定义
  1. (define meg 1048576)
复制代码
  1. (define inches-in-a-mile (* 12 5280))
复制代码
  1. meg
复制代码
  1. 1048576
复制代码
  1. inches-in-a-mile
复制代码
  1. 63360
复制代码
  1. (define (arithmetic-mean x y)
  2.   (/ (+ x y) 2))
复制代码
  1. (arithmetic-mean 3 4)
复制代码
  1. 7/2
复制代码
  1. (define lesser (lambda (l r)
  2.                  (if (< l r) l r)))
复制代码
  1. (lesser 3 4)
复制代码
  1. 3
复制代码
  1. (lesser 4 3)
复制代码
  1. 3
复制代码
  1. (lesser 3 4)
复制代码
  1. 3
复制代码
  1. (define (multi-arg . args) args)
复制代码
  1. (multi-arg 1 2 3)
复制代码
  1. '(1 2 3)
复制代码
  1. (define (multi-arg2 x y . args) (values (+ x y) args))
复制代码
  1. (multi-arg2 3 4 5 6)
复制代码
  1. 7
复制代码
  1. '(5 6)
复制代码
  1. (define (factorial n)
  2.   (if (= n 0)
  3.       1
  4.       (* n (factorial (- n 1)))))
复制代码
  1. (factorial 5)
复制代码
  1. 120
复制代码


局部绑定
  1. (let ((hours-in-a-day 24)
  2.       (seconds-in-an-hour (* 60 60)))
  3.   (* hours-in-a-day seconds-in-an-hour))
复制代码
  1. 86400
复制代码
  1. (let ((double (lambda (x) (* x 2))))
  2.   (* (double 7) (double 12)))
复制代码
  1. 336
复制代码

返回列表