函数式编程语言

说明

racket下载

1984年,Common Lisp诞生。在二十世纪七八十年代,因为Lisp方言过多,社区分裂,不利于lisp总体的发展。从1981年開始,在一个Lisp黑客组织的运作下,经过三年的努力整合后,于1984年推出了Common Lisp。因为Scheme的设计理念和其它Lisp版本号不同,所以虽然Common Lisp借鉴了Scheme的一些特点,但没有把Scheme整合进来。此后Lisp仅剩下两支方言: Common Lisp 和 Scheme。

在2008年,MIT放弃了使用Scheme作为教学语言的SICP(计算机程序的构造和解释)课程,而启用Python进行基础教学。同一时候美国东北大学另立炉灶,其主导的科学计算系统PLT Scheme開始迅猛发展;2010年,PLT Scheme改名为Racket。近几年,The Racket Language连续成为年度最活跃语言站点,并驾齐驱的还有haskell站点。

《How to design programs》 采用scheme语言

DrRacket -> 语言 -> 选择语言 -> 教学用,这个配置就是本书的配置
教程


基本操作

;我是注释
(set! x 'asd)  赋值
(func_name a b c d) 等效于 func_name(a,b,c,d)
(+ 3 (* 4 5))       3 + 4 * 5
(define (f x) (* x x))  自定义函数
(define add5 (lambda (x) (+ 6 x))) 自定义lambda
(f 2)                   等于4
and or not true false < = <= ... 等等
(define x 10)
(cond [(<= x 5) 'ok] [else 'fail])  if-else

expt a^b
log
sqrt

quote:引用用来阻止记号被求值,它是用来用符号或者表原封不动的传递给程序,而不是求值之后传递,由于用的次数很多,被记为 ’ ,例如,(+ 2 3)会被求值为5,然而(quote (+ 2 3))则向程序返回(+ 2 3)本身。’(+ 2 3)代表列表(+ 2 3)本身;

经典\(\sum_{i = 1}^{n}{i}\)

#lang racket
(define (sum n)
  (
   cond
    [(= 1 n) 1]
    [else (+ n (sum (- n 1)))]
  )
  )
(sum 100)

结构体操作

(define-struct entry (name zip phone))
(define mzb (make-entry 'tom 1520 '1231123))
(entry-name mzb)

数组操作

(define v #(1 2 3 4))
(define v (vector 1 2 3 ))
(define v (make-vector 10 1)) 1 1 1 1 1 1 1 1 1
(vector-ref v 0)   v[0]
(vector-length v)
(vector-set! v 2 "abc")

判断类型

(struct? point)
number?
boolean
symbol
(symbol=? 'aaa 'aaa)  判断名称是否一样

类型转换

(string->number "123")
number->string

empty 空表
(cons 'asd empty)
(first (cons 1 empty))
(rest (cons 1 empty))
(append '(1 3) ' (3 4)) 连接两个表
(list 'a '2 'as)        生成一个表
求表的长度
(define list (cons 'a (cons 'b (cons 'c empty))))
list
(define
  (length list_rhs)
     (
       cond
         [(empty? list_rhs) 0]
         [else (+ 1 (length (rest list_rhs)))]
      )
  )
(length list)
posted @ 2021-12-21 13:50  XDU18清欢  阅读(75)  评论(0)    收藏  举报