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.
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