อ่าน 2 นาที
ซีจีโอแอล
CGOL [ 1 ] [ 2 ] (ออกเสียงว่า "ซี กอลล์" ) เป็นไวยากรณ์ทางเลือกที่มีสัญกรณ์พีชคณิตที่ขยายได้สำหรับ ภาษาการเขียนโปรแกรม Lisp ได้รับการออกแบบสำหรับ MACLISP โดย Vaughan Pratt...
ซีจีโอแอล
| ซีจีโอแอล | |
|---|---|
| กระบวนทัศน์ | ขั้นตอน , คำสั่ง , มีโครงสร้าง |
| ออกแบบโดย | วอห์น แพรตต์ |
| ปรากฏครั้งแรก | พ.ศ. 2516 |
| ได้รับอิทธิพลจาก | |
| ALGOL , FORTRAN , MLisp | |
CGOL [ 1 ] [ 2 ] (ออกเสียงว่า"ซี กอลล์" ) เป็นไวยากรณ์ทางเลือกที่มีสัญกรณ์พีชคณิตที่ขยายได้สำหรับภาษาการเขียนโปรแกรม Lispได้รับการออกแบบสำหรับMACLISPโดยVaughan Prattและต่อมาได้พอร์ตไปยังCommon Lisp [ 3 ]
สัญกรณ์ของ CGOL เป็นสัญกรณ์อินฟิกซ์ แบบดั้งเดิม ในรูปแบบของALGOLแทนที่จะเป็นไวยากรณ์สัญกรณ์พรีฟิกซ์แบบ ดั้งเดิมของ Lisp ที่มี วงเล็บ เหมือนกัน ตัวแยกวิเคราะห์ CGOL อิงตามการออกแบบของ Pratt สำหรับการแยกวิเคราะห์ลำดับความสำคัญของตัวดำเนินการจากบนลงล่าง [ 4 ] [ 5 ]บางครั้งเรียกกันอย่างไม่เป็นทางการว่า " ตัวแยกวิเคราะห์ Pratt "
ในเชิงความหมายแล้ว CGOL ก็คือภาษา Common Lisp นั่นเอง โดยมีส่วนเพิ่มเติมคือการรองรับการอ่านและการพิมพ์
อาจกล่าวได้ว่า CGOL เป็นรูปแบบที่ประสบความสำเร็จมากกว่าของแนวคิดสำคัญบางประการที่อยู่เบื้องหลัง โครงการ LISP 2 ก่อนหน้านี้ LISP 2 เป็นผู้สืบทอดของLISP 1.5ที่มุ่งเป้าไปที่การให้ไวยากรณ์ ALGOL LISP 2 ถูกยกเลิกไปแล้ว ในขณะที่โค้ดเบสของ CGOL ยังคงใช้งานได้ในปัจจุบัน เนื่องจากแตกต่างจาก LISP 2 CGOL ถูกพัฒนาขึ้นในรูปแบบของฟังก์ชันและมาโครที่เขียนด้วยภาษา Lisp ซึ่งไม่จำเป็นต้องแก้ไขการใช้งาน Lisp ดั้งเดิมแต่อย่างใด
ไวยากรณ์
มีสัญลักษณ์พิเศษสำหรับการดำเนินการ Common Lisp ที่ใช้กันทั่วไปหลายอย่าง ตัวอย่างเช่น เราสามารถเขียนรูทีนการคูณเมทริกซ์ได้ดังนี้:
สำหรับi ตั้งแต่1 ถึงn ทำซ้ำสำหรับk ตั้งแต่1 ถึงn ทำซ้ำ( ac := 0 ; สำหรับj ตั้งแต่1 ถึงn ทำซ้ำac := ac + a ( i , j ) * b ( j , k ) ; c ( i , k ) := ac )CGOL มี.การดำเนินการแบบอินฟิกซ์ (อ้างอิงถึงconsฟังก์ชันของ Common Lisp) และ@การดำเนินการแบบอินฟิกซ์ (อ้างอิงถึงappendฟังก์ชันของ Common Lisp):
a.(b@c) = (ab)@c
ตัวอย่างข้างต้นสอดคล้องกับข้อความนี้ในภาษา Common Lisp ดั้งเดิม:
( เท่ากับ( เงื่อนไขA ( ต่อท้ายB C )) ( ต่อท้าย( เงื่อนไขA B ) C ))CGOL ใช้ofสำหรับอ่านและตั้งค่าคุณสมบัติ:
'พ่อ' ของx := 'พี่ชาย' ของญาติของyตัวอย่างข้างต้นสอดคล้องกับข้อความนี้ในภาษา Common Lisp ดั้งเดิม:
( PUTPROP X ( GET ( GET Y RELATIVE ) 'BROTHER ) 'FATHER )ตัวอย่างนี้แสดงให้เห็นว่า CGOL ใช้สัญลักษณ์ใดในการแสดงฟังก์ชันที่มีอาร์กิวเมนต์สองตัว:
x,y; 1/sqrt(x**2 + y**2)
ตัวอย่างข้างต้นสอดคล้องกับข้อความนี้ในภาษา Common Lisp ดั้งเดิม:
( แลมบ์ดา( X Y ) ( หาร1 ( รากที่ สอง ( บวก( คูณX 2 ) ( คูณY 2 )))))ไวยากรณ์ของ CGOL นั้นขับเคลื่อนด้วยข้อมูล ดังนั้นจึงสามารถปรับเปลี่ยนและขยายได้
สถานะและรหัสต้นฉบับ
CGOL เป็นที่รู้จักว่าทำงานบนArmed Bear Common Lisp [ 6 ]
ซอร์สโค้ด CGOL และไฟล์ข้อความบางส่วนที่มีการอภิปรายเกี่ยวกับซอร์สโค้ดนี้ สามารถดาวน์โหลดได้ฟรีจากคลังปัญญาประดิษฐ์ของมหาวิทยาลัยคาร์เนกี-เมลลอน[ 3 ]
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ซีจีโอแอล
CGOL [ 1 ] [ 2 ] (ออกเสียงว่า "ซี กอลล์" ) เป็นไวยากรณ์ทางเลือกที่มีสัญกรณ์พีชคณิตที่ขยายได้สำหรับ ภาษาการเขียนโปรแกรม Lisp ได้รับการออกแบบสำหรับ MACLISP โดย Vaughan Pratt...
ไวยากรณ์
มีสัญลักษณ์พิเศษสำหรับการดำเนินการ Common Lisp ที่ใช้กันทั่วไปหลายอย่าง ตัวอย่างเช่น เราสามารถเขียนรูทีนการคูณเมทริกซ์ได้ดังนี้:
สถานะและรหัสต้นฉบับ
CGOL เป็นที่รู้จักว่าทำงานบน Armed Bear Common Lisp [ 6 ]