The Erlang Shell
ต่อไปเราจะเริ่มเปิดเชลของเอิร์ลแลงขึ้นมาเพื่อลองให้งาน โดยในยูนิกส์ให้พิมพ์คำสั่ง "erl" ลงไปมื่อเราสามารถเปิดเชลขึ้นมาแล้ว เราจะเห็นเป็น ( เลขบรรทัด> ) จากนั้นให้ลองพิมพ์ตัวเลขอะไรลงปสักอย่างเพื่อดูผลที่ได้ออกมา (อย่าลืมใส่ . เพื่อแสดงการจบคำสั่ง)
1> −234.
-234
2> 2#1010.
10
3> $A.
65

ในกรณีที่เราไม่ได้ใส่เครื่องหมาย . เข้าไปข้างหลังคำสั่งเอิร์ลแลงจะไม่รู้ว่ามันคือคำสั่งนั่นแปลว่ามันจะเก็บสิ่งที่เราพิมพ์เข้าไปเรื่อยๆจนกว่าเราจะพิมพ์ . เข้าไปนั่นเอง
4> 5-
4>
4> 4.
1
เครื่องหมาย 1>, 2> นั้นคือคอมมานด์พรอมป์ที่แสดงให้เห็นว่าเอิร์ลแลงเชลนั้นพร้อมรับคำสั่งที่เราจะป้อนเข้าไป จากพรอมป์เมื่อเราใส่ตัวเลขและจบด้วยเครื่องหมาย . และกดเอ็นเทอร์ เอิร์ลแลงะรับตำสั่งและทำการแปรออกมาเป็นเลขฐานสิบ แต่ถ้าเกิดข้อผิดพราดเราจะได้เมสเสจออกมาดังนี้
4> 5-.
* 1: syntax error before: '.'
5> q().
ในกรณีที่เราต้องการออกจากโปรแกรมก็สามารถทำได้ด้วยการพิมพ์ q().

Atom
อะตอมในเอิร์ลแลงคือค่าคงที่ที่ไม่ใช่ตัวเลข สำหรับคนที่เคยใช้ภาษาอย่าง C งคุ้นเคยกับการใช้ตัวแปรที่เป็นค่าคงที่เพื่อทำให้โค้ดของเราอ่านได้เข้าใจได้มากขึ้นช่น

#define OP_READ 1
#define OP_WRITE 2
#define OP_SEEK 3
...
#define RET_SUCCESS 223
...
ซึ่งเมื่อเรานำมันมาใช้งานในโปรแกรมหลักผลที่ได้ออกมาจะมีลักษณะนี้
int ret;
ret = file_operation(OP_READ, buff);
if( ret == RET_SUCCESS ) { ... }

ซึ่งโปรแกรมที่เขียนด้วยเอิร์ลแลงนั้นจะออกมาเป็น

Ret = file_operation(op_read, Buff),
if
Ret == ret_success ->
...

การประกาศอะตอมนั้นจะใช้ตัวอักษรตัวเล็กและตามมาด้วยชุดของตัวอักษรตามที่เราต้องการหรือจะเป็น _ หรือt @) เช่น red,ecember, cat, meters, yards, joe@somehost, และa_long_name.นอกจากนี้อะตอมยังสามรถถูกครอบด้วยเครื่องหมาย ' ได้อีกด้วยเนื่องจากในบางกรณีเราต้องการประกาศใช้งานอะตอมที่ขึ้นต้นด้วยตัวหนังสือตัวใหญ่รืออะตอมที่มีตัวอักษรพิเศษเช่น: ’Monday’, ’Tuesday’, ’+’, ’*’,
’an atom with spaces’. ดังนั้นเราจะเห็นว่าค่าของอะตอมใดๆก็คือตัวอะตอมนั่นเอง ดังนั้นเมื่อเราพิมพ์อะตอมลงไปในเชลสิ่งที่เราได้กลับมาคือค่าของอะตอมนั่นเอง
1> hello.
hello
เรื่องนี้ถือเป็นเรื่องค่อนข้างแปลกสำหรับคนที่เคยเขียนภาษาอื่นมาเมื่อเราพูดถึงเรื่องของค่าของอะตอมหรือค่าของอินทิเจอร์ แต่เนื่องจากเอิร์ลแลงเป็นภาษาเชิงฟังก์ชั่นนอล ทำให้ทุกๆคำสั่งหรือการแสดงออก(expression)จำเป็นต้องมีค่า เสมอ

Tuples
ทัปเปิลคือกลุ่มของข้อมูลของเอิร์ลแลง(ต่างชนิดกัน)ที่ถูกเก็บไว้ในรูปแบบของคอลลเล็คชั่นของไอเท็ม ทัปเปิลใช้เครื่องหมายวงเล็บปีกกาเป็นตัวกำหนด, {...}, และแต่ละอิลิเมนท์ของมันจะถูกแบ่งโดยเครื่องหมายลูกน้ำ(commas).
{123, bcd} {123, def, abc} {abc, {def, 123}, ghi} {}
{person, 'Joe', 'Armstrong'} {person, 'Mike', 'Williams'}
ทัปเปิล {123,bcd} ประกอบด้วยสองอิลิเมนท์คือ อิลิเมนท์ที่เป็นอินทิเจอร์ 123 และอิลิเมนท์ที่เป็นอะตอม bcd อีกตัวอย่างของทัปเปอร์
{abc, {def, 123}, ghi} มีสามอิลิเมนท์คือทัปเปิล {def, 123} อีกสองอิลิเมนท์เป็นอะตอมคือ abc และ ghi ส่วน {} แปลว่าทัปเปิลว่างที่ไม่มีสมาชิก ส่วนทัปเปิลที่มีเพียงอิลิเมนท์เดียวเราก็สามารถสร้างได้เช่น {123} แต่ออกจะดูแปลกที่เราจะสร้างของแบบนี้ไว้เพราะเราสามารถเก็บมันไว้บน อันทัปเปิล(untupple) ได้สำหรับทัปเปิลที่มีสมาชิกตัวแรกเป็นอะตอม เราจะเรียกสมาชิกตัวนั้นว่าแทก(TAG) โดยการใช้แทกนี้เป็นข้อตกลงพิเศษทของเอิร์ลแลงที่เราควรรู้ไว้เพราะมันถูกใช้เยอะมาก โดยมากจะใช้เพื่อบอกประเภทของข้อมูลที่เก็บในทัปเปิลเช่น
{person, 'Joe', 'Armstrong'}, อะตอม person จะบอกว่าทัปเปิลนี้ใช้เก็บข้อมูลบุคคลดังนั้นอิลิเมนท์ที่สองของทัปเปิลนี้ควรจะเป็นชื่อ ส่วนอิลิเมนท์  สองก็เป็นนามสกุล สำหรับการใช้แทกนั้นมีเพื่อใช้เพื่อระบุความแต่กต่างของทัปเปิลที่ถูกใช้สำหรับจุดประสงค์ที่ต่างกันในบริเวณต่างๆของโค้ดเรายกตัวอย่างเช่นเราสามารถหาต้นตอของปัญหาที่เกิดขึ้นได้เมื่อมีการส่งทัปเปิลผิดตัวเข้าไปหรือออกมาจากฟังก์ชั่นที่เราเรียกไป
ซึ่งการใช้แทกถือเป็นข้อปฏิบัติที่ดีในการเขียนโปรแกรมด้วยเอิร์ลแลงนอกจากนี้ทัปเปิลยังมีฟังก์ชั่นแบบบิวด์อินมาให้ใช้งานอีกด้วยเช่น

1> tuple_size({abc, {def, 123}, ghi}).
3
2> element(2,{abc, {def, 123}, ghi}).
{def,123}
3> setelement(2,{abc, {def, 123}, ghi},def).
{abc,def,ghi}
4> {1,2}<{1,3}.
true
5> {2,3}<{2,3}.
false
6> {1,2}=={2,3}.
false
คำสั่งที่สองในตัวอย่างที่เราต้องการหาอิลิเมนท์ที่สองแสดงให้เห็นว่าลำดับในทัปเปิลเริ่มด้วยเลข 1 ไม่ใช่ 0
คำสั่งที่สามเป็นการเปลี่ยนค่าอิลิเมนท์ที่สองในทัปเปิล โดยที่ผลที่ได้จะเป็นทัปเปิลใหม่ที่มีค่าตามที่เราต้องการ
โดยที่ทัปเปิลเดิมนั้นค่าก็ยังไม่มีการเปลี่ยนแปลง

Comment

Comment:

Tweet

If you want some rules on how you can speed up the grinding process with regards to term papers online supreme-essay.com then you shouldn't miss discovering this article.

#3 By writing research papers (31.184.238.73) on 2013-08-16 05:49

One understands that today's life seems to be very expensive, but different people need money for different things and not every one gets big sums cash. So to receive good <a href="http://bestfinance-blog.com/topics/personal-loans">personal loans</a> and just bank loan would be a correct way out.

#2 By BUCKLEYKatheryn28 (95.64.12.20) on 2011-08-06 20:54

atom ใน erlang ผมว่ามันคล้ายๆกับ symbol ใน ruby นะครับ คือ มันเป็นคำตามที่เห็นนะแหละ ไม่มี type อะไร เป็นสัญลักษณ์

ส่วนเรื่อง type erlang ไม่เป็น static type เหมือน haskell , tuple หรือ list ของ erlang จะเก็บข้อมูลคนละแบบก็ได้ แต่ที่ผมเห็นว่าต่างคือ list มันจะมี pattern ในการ recursive เข้าไปดูข้อมูลในลิสต์ได้

ส่วน atom หน้า tuple ให้เป็นตัวแทน type ของ record นั้นก็ง่ายดีในการใช้ แต่ถ้าเป็น haskell เอาไปสร้าง type ใหม่ แล้วเอามาเขียน ผมว่ามันอ่านง่ายกว่านะครับ

#1 By iporsut (58.9.250.16) on 2009-12-09 01:32