Programming Languages Part B HW2
这次回顾HW2,主要是实现一个简单的解释器。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
参考资料:
https://www.coursera.org/learn/programming-languages-part-b/discussions/weeks/2/threads/6dEq9JuDQUqRKvSbgyFKuw
https://github.com/houxianxu/programming-language-coursera/blob/master/hw5-section6/hw5-houxianxu.rkt
https://www.jxtxzzw.com/archives/5736
说明假设定义了结构:
(struct apair (e1 e2) #:transparent)
那么如下函数是自带的:
apair?
apair-e1
apair-e2
代码;; Prog ...
Programming Languages Part B HW1 Extra Practice Problems
这次回顾HW1 Extra Practice Problems,主要是Racket基本语法的补充练习。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
习题内容:
https://www.coursera.org/learn/programming-languages-part-b/supplement/xf752/extra-practice-problems
参考资料:
https://www.coursera.org/learn/programming-languages-part-b/discussions/weeks/1/threads/TSM3qblPR9SjN6m5TzfUxg
代码#lang racket
(provide (all-defined-out))
; 1
(define (palindromic arr)
(letrec ([l (length arr)] ...
Programming Languages Part B HW1
这次回顾HW1,主要是熟悉Racket的基本语法。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
代码
#lang racket
(provide (all-defined-out)) ;; so we can put tests in a second file
;; put your code below
; 1
(define (sequence low high stride)
(cond [(> low high) null]
[#t (cons low (sequence (+ low stride) high stride))]))
; 2
(define (string-append-map xs suffix)
(map (lambda (x) (string-append x suffix)) xs))
; 3
(define (list-n ...
Programming Languages Part B Week 4笔记
这次回顾Part B Week 4的内容,主要介绍了静态类型和动态类型的区别。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 4ML vs Racket主要区别
Racket和ML有很多共同点
主要区别
语法
模式匹配与结构测试和访问函数
各种let表达式的语义
最大的不同:ML的类型系统和Racket缺失类型系统
有Typed Racket,与Racket交互得很好,所以你可以有类型化和非类型化模块,但我们不会研究它,它与ML 有一些有趣的不同
即将到来的主题
即将介绍:
什么是类型检查? 静态类型? 动态类型? 等等。
为什么类型检查是近似的?
类型检查的优点和缺点是什么?
但首先要更好地了解ML和Racket:
Racket 程序员如何描述ML?
ML程序员如何描述Racket?
从Racket的角度来看ML
除了语法等,ML就像是Racket的一个明确定义 ...
Programming Languages Part B Week 3笔记
这次回顾Part B Week 3的内容,主要介绍了Struct以及如何在Racket中实现一个简单的编程语言的解释器。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 3在Racket中进行无结构的数据类型编程没有数据类型的生活
Racket没有支持one-of类型的数据类型绑定
在一个动态类型的语言中没有必要。
可以混合不同类型的值,使用number?, string?, pair?,等原语来 “查看你有什么”。
可以使用cons单元来建立任何类型的数据
这一节:用我们已经知道的东西编写数据类型的代码
下一节:用结构体做同样的事情的更好方法
对比有助于解释结构的优势
混合集合
在ML中,不能有一个”ints或strings”的列表,所以要使用数据类型
datatype int_or_string = I of int | S of string
fun ...
Programming Languages Part B Week 2笔记
这次回顾Part B Week 2的内容,主要介绍了Racket基本语法。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 2Racket简介Racket
下面两节将使用Racket语言(不是ML)和DrRacket编程环境(不是Emacs):
安装/基本使用说明见课程网站
和ML一样,以函数式为重点,具有命令式的特点
匿名函数、闭包、无返回语句,等等
但我们将不使用模式匹配
与ML不同,没有静态类型系统:接受更多的程序,但大多数错误在运行时才会发生
真正的极简主义语法
先进的功能,如宏、模块、quoting/eval、continuations、contracts
只介绍其中的几个
Racket vs. Scheme
Scheme和Racket是非常相似的语言
Racket在2010年”改名”了
请原谅我发言时的任何错误
Racket做了一些不向后兼容的 ...
Programming Languages Part B Week 1笔记
这次回顾Part B Week 1的内容,主要介绍了课程结构。
课程主页:
https://www.coursera.org/learn/programming-languages-part-b/home
B站搬运:
https://www.bilibili.com/video/BV1tZ4y1D7
Week 1欢迎来到Part B再次欢迎你!
A部分涵盖了很多内容——现在让我们在此基础上再接再厉!
挑战性的机会,学习编程语言的基本概念。
通过努力工作、耐心和开放的心态,本课程使你成为一个更好的程序员
糟糕的课程摘要:”使用ML、Racket和Ruby”
现在:
另一种函数式语言——更容易上手
强大的习语”延迟评估”
用闭包实现你自己的编程语言
静态类型与动态类型
(缺少)介绍性材料
与A部分格式相似
所以要”直接进入”
(根据需要,查阅课程信息和A部分材料)
Part B概述我们了解过的内容Part A:
基础知识、函数、递归、范围、变量、元组、列表……
数据类型、模式匹配、尾递归
头等函数,闭包和课程动机!
类型推理、模块、等价性
总的来说:对静态 ...
OSTEP Chapter 7 回顾
这里回顾第7章,本章介绍了进程调度:介绍。
书籍介绍:
https://book.douban.com/subject/34994608/
学习资料:
https://pages.cs.wisc.edu/~remzi/OSTEP/
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
参考资料:
https://www.cnblogs.com/bwbfight/p/11181631.html
https://blog.csdn.net/u014530704/article/details/73848573
https://www.cnblogs.com/kunhu/p/3608109.html
https://blog.csdn.net/qq_42914528/article/details/82023408
参考资料:
http ...
OSTEP Chapter 6 回顾
这里回顾第6章,本章介绍了机制:受限直接执行。
书籍介绍:
https://book.douban.com/subject/34994608/
学习资料:
https://pages.cs.wisc.edu/~remzi/OSTEP/
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
参考资料:
https://www.cnblogs.com/bwbfight/p/11181631.html
https://blog.csdn.net/u014530704/article/details/73848573
https://www.cnblogs.com/kunhu/p/3608109.html
https://blog.csdn.net/qq_42914528/article/details/82023408
参考资料:
ht ...
OSTEP Chapter 5 回顾
这里回顾第5章,本章介绍了插叙:进程API。
书籍介绍:
https://book.douban.com/subject/34994608/
学习资料:
https://pages.cs.wisc.edu/~remzi/OSTEP/
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
参考资料:
https://www.cnblogs.com/bwbfight/p/11181631.html
https://blog.csdn.net/u014530704/article/details/73848573
https://www.cnblogs.com/kunhu/p/3608109.html
https://blog.csdn.net/qq_42914528/article/details/82023408
第5章 插叙:进程 ...
OSTEP Chapter 4 回顾
OSTEP的全称是Operating Systems: Three Easy Pieces,是一本很好的操作系统入门书,之所以再看这本书,是因为学习xv6碰到了不少困难,希望结合多个教材一起学习,后续会给出大部分章节的回顾,这里从第4章开始,本章介绍了抽象:进程。
书籍介绍:
https://book.douban.com/subject/34994608/
学习资料:
https://pages.cs.wisc.edu/~remzi/OSTEP/
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese
https://github.com/joshuap233/Operating-Systems-Three-Easy-Pieces-NOTES
第4 章 抽象:进程内容回顾关键概念
进程:运行中的程序。
虚拟化:
需要低级机制和高级智能来支持;
低级机制:称为机制,为系统的“如何(how)”问题提供答案;
高级智能:称为策略,为系统的“哪个(which)”问题提供答案;
时 ...
Programming Languages Part A Section4 翻译
这里对Section 4进行翻译。
课程主页:
https://www.coursera.org/learn/programming-languages/home
B站搬运:
https://www.bilibili.com/video/BV1dL411j7L7
Coursera编程语言课程 第4节总结标准说明:本总结涵盖的材料与课堂视频以及随视频发布的材料(幻灯片、代码)大致相同。它有助于以叙述的方式阅读材料,并将整个课程部分的材料放在一份文件中,特别是在以后复习材料时。请在讨论板上报告这些笔记中的错误。
目录
什么是类型推断?
更全面的ML类型推断实例
多态类型的例子
可选:值限制
可选:一些使类型推断更加困难的事情
相互递归
用于命名空间管理的模块
签名
隐藏东西
介绍我们的扩展实例
我们例子的签名
可爱的转折:暴露整个函数
签名匹配规则
等价的实现
不同的模块有不同的类型
动机和定义等价
无副作用程序设计的另一个特点
标准等价
重新审视我们对等价的定义
什么是类型推断?虽然我们已经使用ML类型推断有一段时间了,但我们还没有仔细研究过它。我们将首先仔细了解什么是类型推断,然后 ...