null/nil

จากที่อ่าน Wikipedia มาซึ่งที่ไปที่  InfoQ อีกที null pointer เริ่มใช้ครั้งแรกใน Algol W ที่สร้างขึ้นมาในค.ศ. 1966 ซึ่งผมก็ไม่เคยเขียน Algol เลย

nil ไม่ใช่การปรับปรุง null เพราะว่า nil ใน Lisp เกิดมาก่อนอีก อย่างน้อยใน ค.ศ. 1960 ตามเอกสารนี้ ก็บอกไว้ชัดเจนเลยว่า (m) คือรูปย่อของ (m . NIL) และ list[e1;e2;…;e_n] ก็คือ cons[e_1;cons[e2;…;cons[e_n;NIL]]] ส่วน null เป็น predicate ที่ว่า null[x] = atom[x] and eq[x;NIL]

ใน Ruby ก็มี nil เหมือนกัน แต่ไม่มี list ไม่มี cons มี Array แทนแล้วเวลาทำอะไรก็ออกแนว message passing แทนที่จะเป็น function แบบ Lisp มันก็ไม่มีอะไรมาแทน cons ด้วย จะใช้ << หรือ push แทนก็ไม่ได้ แบบข้างล่างนี้เจ๊งหมด แน่นอนว่า "A" และ nil มันไม่ใช่ Array

nil << "A"
"A" << nil
"A".push(nil)
nil.push("A")

แต่ถ้าเป็น Lisp ก็จะเขียนแบบด้านล่างได้เลย

(cons "A" nil) ;; ได้ ("A")

หรือถ้าเป็น Clojure ก็จะเขียนแบบข้างล่างได้ด้วย

(conj nil "A") ;; ได้ ("A")

อาจจะเป็นไปได้ว่า nil ใน Ruby เขียนว่า nil ก็จริงแต่คุณสมบัติเหมือน null ของ Algol W ทั้ง Go และ Pascal ก็น่าจะเข้ากรณีเดียวกันกับ Ruby

Advertisements
This เรื่อง was posted in ไม่มีหมวดหมู่. Bookmark the permalink.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s