lang-0.2: README.md
語
==
Copyright (C) 2014-2018 Zaoqi <zaomir@outlook.com>
這只是核心,不是直接用來solve problems · make languages的。
因爲
+ Idris的Lazy有Bug
+ Shen不支持中國字
+ Agda std-lib缺少一些東西
+ Scheme,Racket不能很好的編譯到ECMAScript
+ Clojure-JVM不支持Tail Call Optimization
+ F#是Microsoft的
所以只能用GHC-Haskell或Ocaml或Coq。
因爲杭十五中差等原因,我使用傳統寫法。我聽說臺灣不使用這種寫法。
歷史/特性
-------
某些東西被意外毀了,所以我可以修改歷史。雖然被修改過,我說以下內容是事實。
# 版本
## 用易語言寫的一個版本
## 用Java寫的一個版本
## 用Go重寫三次
## 用Haskell寫的一個版本
## 用Racket/Scheme/Idris/Haskell重寫十三次
### 函數和宏
#### 複雜的Curried+非Curried函數和宏
#### ↓
#### 非Curried的函數和宏
### 數據
#### 用Mapping實現用戶自定義數據
#### ↓
#### 構--Scheme的cons的一種用法
### Lazy
#### 像MicroKanren一樣的Lazy (現在是可以沒有的)
### 命名 Symbol
#### Scheme的symbol
#### ↓
#### 普通symbol+call/gensym產生的不能symbol->string的symbol
#### ↓
#### 只有域+值的symbol
call/gensym修改`域`,`域`默認是`()`。
#### ↓
#### 列表
+ `'hash-set`是`(名 '((#\h #\a #\s #\h) (#\s #\e #\t)))`
+ `'a`是`(名 '((#\a)))`
+ `(call/gensym 'a f)`產生`(名 '(#<procedure> (#\a)))`
#### ↓
#### 現在的
...
### 值
開始就只有值
### Mapping
#### 不可知有哪些鍵 不可修改 作爲數據和模塊 帶有letrec功能
#### ↓
#### 可知有哪些鍵 可修改
#### ↓
#### Mapping,letrec分離 成爲普通的Mapping和letrec
#### ↓
#### Mapping的鍵可以是誤
### 誤 錯誤 raise
... (被我從歷史中刪除了)
### 宏
多次變化:
#### 只有 參數爲環境+S-Exp 返回一個值 的函數 作爲宏
#### 還有 參數爲 S-Exp 返回S-Exp 的函數 作爲宏 (現在的)
### 反算
#### 反算函數
多次變化:
+ 全部反算
+ 表層反算
+ 都有
#### ↓
#### 解構
有
+ 機-境
+ 機-形
+ 機-物
#### ↓
#### 刪 機-境
### 爲反算出現的特殊形式 !-界
多次變化:
+ 特殊名字 是一個宏
+ 是特殊形式 (現在的)
### 語法
... (被我從歷史中刪除了)
### 被刪除的
+ 數字
+ English
+ 新象形文字
+ 一種 undefined 類似 R7RS中可以繼續的raise
+ 某些函數 : map ...