ช่วยอธิบาย Haskell อันนี้หน่อยครับ

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

f op n [] = n

กับกรณี parameter ตัวที่ 3 เป้น array ปกติ

f op n (h:t) = h `op` f op n t

ถ้ายังงงว่าทำไมมันต้อง 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 แรก

f op n [] = n
==>
f (+) 0 [] = 0
freeman's picture

ขอบคุณมากๆ ครับผม :-)

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น