我真的想不太到適當的標題 QQ,不用太在意上面那個標題 (?)在這場議程中,我會分享我於去年專研課所做的研究。研究中我用一些方式,在 Functional Programming 的框架下嚴格定義了日常我們看到的一些語法的行為,例如變數指定、if else、for loop 等。 我會盡量使用平易近人的方式講解,讓先備知識降到最低。
先備知識
必備: 對程式語言有基礎了解者 (知道條件判斷、迴圈等)
有很好,沒有也沒關係:接觸過程式語言理論相關者
SITCON 2020 共筆
SITCON 2020
2020
共筆
R3
歡迎大家來到SITCON 2020 ヽ(✿゚▽゚)ノ
共筆入口:https://hackmd.io/@SITCON/2020
手機版請點選上方 按鈕展開議程列表。
請從這裡開始
telegram、FB、IG - koru1130
一種表示語法的方式
<symbol>::expression
<symbol>
<digit> ::= 1|2|3|4|5|6|7|8|9|0
<number>::=<digit>|<number><digit>
- 3
- 42
<expr>::=<number>
<expr>+<expr>
<expr>-<expr>
15 1符合number5符合digit
max: int -> int -> int
max: int -> (int -> int)
S1: a <- 1
S2: b <- 2
S3: a <- a+b
S3(S2(S1(st)))
P:=O|S;P
P 遞迴
[[_]] Statement ->(State ->State)
[[O]] st=st
[[S;P]] st = ([[S]]。[[P]]) st
e:=v|a|f(e,e…e)
v 值
a 變數
f(e,e…e) 函數呼叫
E:(Expression, State) -> Value
E(v, st) = v
E(a, st) = get a st
E(f(e0, e1 … en), st) = f(E(e1, st), E(e2,st) … , E(en, st))
st =
get : Name -> State -> Value
get owo st = 3
S := a <- e
[[a <- e]] st = set a E(e, st) st
state
set : name -> value
s := if e then s else s
ifte(true,e1,e2) = e1
ifte(false, e1, e2) = e2
[[if c then s1 else s2]] st
= ifte(E(c, st), [[s1]], [[s2]]) st
[[for i in ls do s]] st
= (foldl(λf.x.([[s[i:=x]]])))
fold : (a -> b -> a) ->a -> [b] -> a
fold fz[1,2,3,4,5]
fold (+) 0 [1,2,3,4,5]
= ((((0 + 1) + 2) + 3) + 4) + 5
[[for i in ls do s]] st
= (fold _z ls) st
z = id
_ = λf . x . ([[s[i := x]]] 。 f)
for i in ls do
a <- a + i
[[for i in ls do a <- g(a, i)]] st
= [[a <- (foldl g a xs)]] st
f(foldl g a xs) = foldl h b xs
<= (f a=b) ^ (f (g x y) = h(f x)y)
為什麼變數不可變
和一般語言有變數的概念不同,function 沒有變數的概念,不能更改它
所以 function programming 什麼時候會用到呢? 有什麼適合的程式語言支持嗎?
React is function programming
Haskell is function programming
為什麼會想到用 functional model imperative
oop 也可以用 functional 遞迴啊
變數不可變 -> 只能遍歷 array 取值而已
他的概念是有點像 lisp 類型的語言嗎?
Haskell 有什麽缺陷嗎?
io 複雜
可以介紹你個人學習資訊的經歷嗎?
推坑 Haskell X)
flolac 邏輯 語言與計算暑期研習營
偶數年 functional
奇數年 …
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing