Archive for ธันวาคม, 2007
30 ทิป C++ ใน 30 วัน
ผมไม่ได้จะเขียนหรอกนะ แต่เป็นที่นี่นะ http://www.informit.com/blogs/index.aspx?st=60479 ไปติดตามกันได้
Add comment ธันวาคม 4, 2007
The one-element type () in Haskell
ใน Haskell จะมีประเภทข้อมูลอยู่แบบหนึ่งที่มีข้อมูลอยู่ตัวเดียวเท่านั้นที่เป็นสมาชิกของข้อมูลประเภทนี้ ก็คือข้อมูลแบบ () ส่วนตัวข้อมูลก็เขียนแบบเดียวกันก็คือ () ถ้าเราใช้คำสั่ง :t () จะได้ผลลัพธ์ที่แสดงออกมาเป็น () :: () เป็นข้อมูลที่ปกติเหมือนจะไม่มีประโยชน์อะไร แต่จริงๆแล้วมีประโยชน์กับเรื่อง I/O actions ใน Haskell มากๆ จะเห็นได้ว่า main จะมี type เป็น IO () คือ main::IO () putStrLn ก็เช่นกัน putStrLn::IO () อธิบายตามที่ผมเข้าใจก็คือ เมื่อเราเรียกใช้ putStrLn มันจะรับค่าเราไปแสดงผล ส่วน ผลลัพธ์ที่ส่งมาก็คือ () ซึ่งก็คือค่าเปล่าๆไม่มีอะไร
มันทำให้ผมเข้าใจวันนี้เองว่าทำไมก่อนหน้านี้ผมเขียนโปรแกรมแล้วมันมักมี error แบบนี้
The last statement in a ‘do’ construct must be an expression
ที่เป็นแบบนี้ก็เพราะว่า statement สุดท้ายใน do construct ของผมมันไม่ได้ return ค่าที่ถูกต้องตาม type ของ main::IO () พอผมเข้าใจเรื่อง () แล้ว ตอนนี้เวลาผมจะจบ statement สุดท้ายใน do construct ถ้ามันไม่เป็น IO () ผมก็สามารถให้มันเป็นได้โดยการสั่ง return () ออกมาเองได้เลย เพราะว่า return นั้นมันจะส่งค่า IO ของประเภทข้อมูลที่มันรับเข้าไป ตัวอย่างเช่น ถ้าผมจะรับค่าเฉยๆ โดยไม่ทำอะไร ใน main
main = do
getLine
return ()
ผมก็จะเขียนแบบนี้ได้ ถ้าไม่มี return () จะเกิด error ขึ้นมาเพราะ getLine มันมี type เป็น getLine::IO String
ป.ล. ผมว่าคงจะมีน้อยคนที่จะพอเข้าใจที่ผมเขียน เพราะว่าคนเขียน Haskell ในไทย มีน้อย และ ผมก็เขียนอธิบายไม่ค่อยเก่งซะด้วยสิ
ก็แค่เขียนไว้เตือนความจำตัวเอง
1 comment ธันวาคม 1, 2007