Introduction to Basic Haskell Components (In Chinese)ChengHui Weng
?
In 2012, we had the first Chinese functional meetup about general functional programming techniques in Taipei. I gave this talk to introduce several classes in the famous Typeclassesopedia article.
8. 函數式程式設計?
? Joel Spolsky
具備一級函式的程式語言,能讓你找到更多抽象
化的機會 - 《約耳續談軟體》
? Simon Peyton Jones
– 純函數式領域中學到的觀點和想法,可能會給
主流領域帶來資訊、帶來啟發 - 《編程的頂尖
對話》
9. 函數式程式設計?
? I Have to Be Good at Writing
Concurrent Programs
? Most Programs Are Just Data
Management Problems
? Functional Programming Is
More Modular
? I Have to Work Faster and
Faster
? Functional Programming Is a
Return to Simplicity
11. ? 費式數的數學定義
F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2
? 指令式程設(Imperative programming)
int fib(int n) {
int a = 1; int b = 1;
for(int i = 2; i < n; i++) {
int tmp = b; b = a + b; a = tmp;
}
return b;
}
15. 初探函数程式设计
? 將問題分解為子問題才是重點
– 遞迴只是程式語法上表現子問題外在形式
? 命令式加總數列
– 變數 sum 初始值為 0,逐一取得數列元素與
sum 相加後更新 sum,直到沒有下個元素後傳
回 sum …(命令電腦如何求解)
int sum(int[] nums) {
int sum = 0;
for(int num : nums) { sum += num; }
return sum;
}
47. ? 設計 Option 物件
public class Option<T> {
private final T value;
public Option(T value) { this.value = value; }
public T getOrElse(T replacement) {
return this.value == null ? replacement : this.value;
}
}
Option<T> selectBy(T replace) {
...
return new Option(rs.next() ? rs.getString("name") : null);
}
String name = selectBy(id).getOrElse("Guest")
48. 函數式程式設計?
? I Have to Be Good at Writing
Concurrent Programs
? Most Programs Are Just Data
Management Problems
? Functional Programming Is
More Modular
? I Have to Work Faster and
Faster
? Functional Programming Is a
Return to Simplicity