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


 

ธันวาคม 2007
พฤ อา
« พ.ย.   ม.ค. »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

ความเห็นล่าสุด

etcpe9 on Validate Form ด้วย LiveVa…
BraiN on ประสบการณ์ จับใบดำใบแดง
pphetra on Tree In Haskell
phondanai on Tree In Haskell
ืneogravity on About

Meta

Blogroll

cpe9

Linux

programming