文章列表
斯坦福编程范式CS107_27
# 斯坦福编程范式 CS107_27
# 讲讲 Haskell
它和 Lisp 和 Scheme 来自同一家族,是一种函数性语言。Haskell 和 JAVA 一样安全,它很难使程序通过编译然后失败。它像 C 一样块,但是没有 C 那么块。像 python 一样有趣。
用 Haskell 实现斐波那契函数
fib = 1:1:zipWith(+)fib(tail fib)# Haskell 中的类型
Haskell 中的函数也有类型。
addOne num = num + 1addOne::Int -> Intadd val1 val2 = val1 + val2add::Int...
more...
斯坦福编程范式CS107_15
# 斯坦福编程范式 CS107_15
# 接着上一次的卖票问题
int main(){ int numAgents = 10; int numTickets = 150; for(int agent = 1;agent <= numAgents;agent++){ SellTickets(agent,numTickets/numAgents); } return 0;}void SellTickets(int agentID,int numTicketsToSell){...
more...
斯坦福编程范式CS107_21
# 斯坦福编程范式 CS107_21
# 将之前 C++ 写的一个函数用 Scheme 编程
使用 scheme 实现如下内容:
>(double-all '(1 2 3 4))(2 4 6 8)>(incr-all '(1 2 3 4))(2 3 4 5)对于这种功能,不需要迭代,只需要如下代码就可以实现:
(define (double x)(* x 2))(define (incr x)(+ x 1))在 scheme 中还有一个内置函数被称为 Map,它可以接收 2...
more...
斯坦福编程范式CS107_19
# 斯坦福编程范式 CS107_19
# 介绍 Scheme
# 程序范式
在 C 中我们大多数是采用如下方式对对象进行操作,对过程进行编程。
Vector v;VectorNew(&v,...);VectorInsert(&v,...);VectorSort(&v,...);在 C++ 中则是面向某一个对象的。
Vector<int> v;
v.pushback(4);
v.erase(v.begin());
# 函数范式
函数听起来和程序差不多,但如果你了解程式 ( procedure )...
more...
斯坦福编程范式CS107_24
# 斯坦福编程范式 CS107_24
# Python
Python 是典型的脚本语言 (Scripting language), 它也是面向对象的、函数的 。Python 是动态的,C 和 C 不是,C 和 C 使用大量时间进行编译,在运行时只有非常少的类型信息。Scheme 和 Python 都保持运行时,存在的每一个数据段的类型信息,你实际上可以查询数据类型,只要你想。
和 Scheme 相似
>1 + 2 + 3 + 410>"Hello""Hello"Python 使用 list 的一些操作
>>> seq =...
more...
斯坦福编程范式CS107_22
# 斯坦福编程范式 CS107_22
今天讲一下 lambda 函数的思想和几个显著的例子。
# 第一个问题
几个谨慎的数学问题,使用 scheme 解决。
# power-set
power-set 是一个包含所有子集的集合。例如对于集合 (1 2 3) ,我要列出它的所有子集,我就必须一一列举。最终我要得到的是所有子集的集合,即 power-set
(1 2 3) => (() (1) (2) (3) (1 2) (1 3) (2 3) (1 2 3))我们把上面的这个列表以以下方式进行排列:尝试找出相关的规律
(() (2) (3) (2 3) (1) (1 2) (1 3) (1...
more...
斯坦福编程范式CS107_23
# 斯坦福编程范式 CS107_23
# Scheme 内存模型
>'(1 2 3)对于上述的数据,他的内存结构如下所示。
当使用以下命令时,scheme 会创建一个全局符号表,这个东西交 seq ,它会与这个变量关联起来。
>(define seq '(1 2 3))
当使用 cons 命令时,如下所示。cons 在合并两个列表的时候其实是构造了一个新列表,如下图所示。
>(cons '(1 2 3) '(4 5 6))
因此,输出的结果是如下所示的。
((1 2 3) 4 5 6)下面让我们用两种方式构建一个列表:
((1 2) 1...
more...
斯坦福编程范式CS107_25
# 斯坦福编程范式 CS107_25
# 使用 Python 重写 RSG
下面的 grammar 有两个 key,分别映射到一个列表上,其中一个是一个长度为 1 的列表,另一个是长度为 3 的列表。
import sysgrammar = {'<struct>':[['This','<object>','is...
more...
斯坦福编程范式CS107_26
# 斯坦福编程范式 CS107_26
# 本课程的所有内容:
C Assembly C++ Concurrent Programming Scheme Python
学习这些语言所体现出的范式,而不是语言本身,学习的内容还很浅。
纯 C 没有类,并且更多的是面向整个编程的过程,它代表了过程范式,或者叫命令式范式。它是面向动词的,比如函数,函数就是有很强的动词特征。
C++,对于一行代码,我们首先看到的是对象,因此这被称为面向对象的,而不是面向过程的。
Assembly。我们通过汇编语言,来看如何把一个 C 或者 C 程序编译成一个.O 文件以及二进制文件。当从汇编语言的角度去看时,我们可以发现...
more...
斯坦福编程范式CS107_20
# 斯坦福编程范式 CS107_20
# 接着上节课的 sum-list
我们希望不利用系统提供的递归,自己设计一个计算求和的函数,如下:要求对于 (sum-list '(1 2 3 4 5)) 输出 15
(define sum-list(num-list) (if(null? num-list) 0 (+(car num-list) (sum-list(cdr num-list)))))下面我们设计一个斐波那契数函数使用递归。
(define fib(n) (if (or (= n 0) (= n 1)) n (+ (fib(- n 1)) (fib(- n 2))))scheme...
more...