Tianyi's Blog Tianyi's Blog
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)

Tianyi

一直向前,永不停止
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)
  • 镜像站

  • 环境

  • Docker

  • 工具

  • Linux

  • 新知

    • MIT-Missing-Semester
    • MIT 6.031 SoftwareConstruction
    • CS61A-Structure and Interpretation of Computer Programs
    • MIT Web Development Crash Course
    • Scheme函数式编程
      • 前言
        • 简介
        • 安装scheme
        • Linux
        • win
      • key point
        • 样式
      • 拓展
    • Stanford CS142-Web Applications
  • Jenkins

  • Consul_服务注册发现

  • SHELL

  • 项目

  • 运维
  • 新知
tianyi
2023-05-09
目录

Scheme函数式编程

# 前言

# 简介

Scheme 是 Lisp (opens new window) 的一个变种,而 Lisp 是继 Fortran (opens new window) 之后仍然广受欢迎的第二古老的编程语言。Lisp 程序员社区几十年来持续蓬勃发展,Clojure (opens new window) 等 Lisp 的新方言拥有现代编程语言中增长最快的开发人员社区。如果你想亲手试试本文中的例子,可以下载一个 Scheme 的解释器 (opens new window) 来操作。

# 安装scheme

# Linux

  1. 打开终端。

  2. 使用 wget 命令来下载 Racket 安装包。可以在 Racket 官方网站上找到适合你的 Linux 版本的下载链接。

    例如,使用以下命令下载 Racket 8.4版本:

    wget https://mirror.racket-lang.org/installers/8.4/racket-8.4-x86_64-linux.sh
    
    1

    这里假设下载的是 64 位 Linux 的安装包,你需要根据自己的系统架构选择对应的安装包。

  3. 下载完成后,你可以运行下载的安装脚本来安装 Racket。确保你已经有执行权限:

    chmod +x racket-8.4-x86_64-linux.sh
    
    1
  4. 运行安装脚本:

    ./racket-8.4-x86_64-linux.sh
    
    1
  5. 按照安装向导的指示完成 Racket 的安装过程,并根据需要配置环境变量等。

  6. racket 启动!

# win

https://racket-lang.org/download/ (opens new window)

# key point

  • 在 Scheme 中,任何不被求值的表达式都被称为被引用。
    • 抽象是解决复杂性问题的第一要素
    • 这种引用的概念源自一个经典的哲学区分,即一种事物(比如一只狗)会四处奔跑和吠叫,而“狗”这个词是一种语言构造,用来指代这种事物。当我们在引号中使用“狗”时,我们并不是指代某只特定的狗,而是指代一个词语。

# 样式

(+ (* 3 5) (- 10 6))

定义函数
(define (square x) (* x x))


1
2
3
4
5
6

使用嵌套定义和递归定义了一个用于计算平方根的迭代过程:

(define (sqrt x)
  (define (good-enough? guess)
    (< (abs (- (square guess) x)) 0.001))
  (define (improve guess)
    (average guess (/ x guess)))
  (define (sqrt-iter guess)
    (if (good-enough? guess)
        guess
        (sqrt-iter (improve guess))))
  (sqrt-iter 1.0))
(sqrt 9)
1
2
3
4
5
6
7
8
9
10
11

迭代分为两个部分:进入条件和逼近函数

  • good-enough?为条件
  • improve为逼近函数

不断迭代知道逼近最小值

> (define (sqrt x)
    (define (good-enough? guess)
      (< (abs (- (square guess) x)) 0.001))
    (define (improve guess)
      (average guess (/ x guess)))
    (define (sqrt-iter guess)
      (if (good-enough? guess)
          guess
          (sqrt-iter (improve guess))))
    (sqrt-iter 1.0))
> (sqrt 9)
3.001
1
2
3
4
5
6
7
8
9
10
11
12

# 拓展

  • 还可以操作文件流之类
  • 例如AI脚本也会涉及到这种LISP语言
  • 目前还不知道函数式编程语言有什么用,有机会再看【17kk】
完善页面 (opens new window)
MIT Web Development Crash Course
Stanford CS142-Web Applications

← MIT Web Development Crash Course Stanford CS142-Web Applications→

最近更新
01
JDK
02-23
02
BadTasteCode && 优化
09-11
03
Gradle 实践操作指南及最佳实践
09-11
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Tandy | 粤ICP备2023113440号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式