MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数
4. 5. fn plus_one(i: Int) -> Int { i + 1 } 6. fn plus_two(i: Int) -> Int { i + 2 } 7. 8. let add_two: (Int) -> Int = repeat(plus_one) // 存储函数 9. 10. let compare: Bool = add_two(2) == plus_two(2) // -> Int = repeat(plus_one) repeat(plus_one) fn (a) { plus_one(plus_one(a)) } 替换表达式中的标识符 let x: Int = add_two(2) add_two(2) plus_one(plus_one(2)) 替换表达式中的标识符 plus_one(2) + 10 码力 | 27 页 | 2.56 MB | 1 年前3
Agda User Manual v2.6.0.1: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 256 页 | 247.15 KB | 1 年前3
Agda User Manual v2.6.0: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 256 页 | 246.87 KB | 1 年前3
Agda User Manual v2.6.0Even : Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 191 页 | 857.07 KB | 1 年前3
Agda User Manual v2.6.0.1Even : Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 191 页 | 857.57 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)), Value(7)) +678" -> [ Value(12), Plus, Value(678) ] 通常可以通过有限状态⾃动机完成 ⼀般⽤领域特定语⾔定义后,由软件⾃动⽣成程序 算术表达式的词法定义 1. Number = %x30 / (%x31-39) *(%x30-39) 2. LParen = "(" 3. RParen = ")" 4. Plus = "+" 5. Minus Divide = "/" 8. Whitespace = " " 3 词法分析 算术表达式的词法定义 1. Number = %x30 / (%x31-39) *(%x30-39) 2. Plus = "+" 每⼀⾏对应⼀个匹配规则 "xxx" :匹配内容为xxx的字符串 a b :匹配规则a,成功后匹配规则b a / b :匹配规则a,匹配失败则匹配规则b *a :重复匹配规则a,可匹配0或多次0 码力 | 25 页 | 400.29 KB | 1 年前3
Agda User Manual v2.6.2.2: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 354 页 | 433.60 KB | 1 年前3
Agda User Manual v2.6.2.1: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 350 页 | 416.80 KB | 1 年前3
Agda User Manual v2.6.1.3: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 305 页 | 375.80 KB | 1 年前3
Agda User Manual v2.6.1.2: Nat → Set can be defined as follows: data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) General form The general form of the definition of a have a datatype Even defined as follows data Even : Nat → Set where even-zero : Even zero even-plus2 : {n : Nat} → Even n → Even (suc (suc n)) then we can define a function one-not-even : Even 1 → arguments Example 1. You can’t use an irrelevant value in a non-irrelevant context. bad-plus : Nat → .Nat → Nat bad-plus n m = m + n Variable m is declared irrelevant, so it cannot be used here when checking0 码力 | 304 页 | 375.60 KB | 1 年前3
共 51 条
- 1
- 2
- 3
- 4
- 5
- 6













