let { f op n [] = n ; f op n (h:t) = h ‘op’ f op n t }
ตอนนี้เข้าใจว่าคือการสร้าง function f โดยที่ มี parameter 3 ตัว คือ op , n , และ [] เพราะตัวอย่าเค้าป้อน f (+) 0 [1..3]
f op n [] = n ===> f (+) 0 [1..3] = 0;
หลังจากนั้นตรง f op n (h:t) = h op f op n t นี่งงคับ
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
function นี้ define ไว้ 2 กรณีคือ
กรณีที่ parameter ตัวที่ 3 เป็น empty-array
กับกรณี parameter ตัวที่ 3 เป้น array ปกติ
ถ้ายังงงว่าทำไมมันต้อง define เป็น 2 function แบบนี้
แนะนำว่าควรอ่าน concept เรื่อง pattern matching ก่อน
http://en.wikipedia.org/wiki/Pattern_matching
เมื่อเราเรียก
f (+) 0 [1..3]เนื่องจาก array ของเรามีค่า
มันก็จะใช้ function ที่สองในการทำงาน
f (+) 0 (1:[2,3]) = 1 + (f (+) 0 [2,3]) = 1 + (2 + (f (+) 0 [3])) = ... = 1 + ... + (f (+) 0 [])หลังจาก recursive ไปเรื่อยๆ จนถึง f (+) 0 [] (ตัวที่อยู่ที่ท้ายบรรทัด),
กรณีนี้ค่าใน array ของ parameter ตัวที่ 3 มันเป็นค่าว่าง
ดังนั้นเวลามันทำงาน มันก็จะไปตกในเงื่อนไข function แรก
ขอบคุณมากๆ ครับผม :-)