คืนค่าการตั้งค่าทั้งหมด
คุณแน่ใจว่าต้องการคืนค่าการตั้งค่าทั้งหมด ?
ลำดับตอนที่ #6 : หน่วยย่อยที่ 5 Sensitive Field and Slurping
ความละเอียดอ่อนของฟิลด์
fact เช่น (duck) หรือ (quack) ประกอบไปด้วยฟิลด์ๆเดียว ฟิลด์เรียกว่าที่เก็บข้อมูล 1 ชนิด อาจจะเรียกอย่างอย่างหนึ่งว่า deftemplate ซึ่งจะได้กล่าวถึงในบทที่ 5
ลำดับของชื่อฟิลด์ก็มีความสำคัญ เช่น ในกรณีที่ใส่กฎเกณฑ์ว่า “ล่า”
(Brian duck) หมายถึง Brian ล่าเป็ด
ต่างจาก
(duck Brian) หมายถึงเป็ดล่า Brian
โดยทั่วไปแล้ว วิศวกรรมซอฟต์แวร์ที่ดีจะกำหนดกฎเกณฑ์พร้อมๆกับความสัมพันธ์ระหว่างฟิลด์เสมอ เช่น
(hunter-game duck Brian)
ฟิลด์แรกหมายถึง hunter ฟิลด์ที่สองหมายถึง game
list คือกลุ่มของสิ่งที่การเรียงลำดับมีความหมาย multifield หมายถึงหลายๆฟิลด์เรียงลำดับกัน ซึ่งแต่ละฟิลด์อาจมีค่าหรือไม่ก็ได้ ตัวอย่างเช่น (duck Brian) เรียกว่า multifield facts ถ้าบางฟิลด์ไม่มีค่าเรียกว่า nil เช่น
(duck nil)
แปลว่า duck ล่าอะไรไม่ได้สักกะอย่าง หมายถึงว่ามี 2 ฟิลด์นั่นเอง แต่ฟิลด์ที่สองไม่มีค่า
มีฟิลด์หลายๆชนิด type เช่น float, integer, symbol, string, external-address, fact-address, instance-address ชนิดของฟิลด์เป็นตัวกำหนดชนิดของข้อมูลที่เก็บอยู่ในฟิลด์นั้น ในกรณีที่ไม่กำหนดชื่อฟิลด์ ชนิดของฟิลด์จะถูกกำหนดโดยชนิดข้อมูลที่เราใส่เข้าไป ใน deftemplate เราสามารถกำหนดชนิดของฟิลด์ได้
symbol เป็นชนิดของฟิลด์ซึ่งเริ่มต้นด้วยตัวอักษรที่สามารถพิมพ์ออกมาได้และตามด้วยอักษรอื่นๆ ฟิลด์สามารถกำหนดได้ด้วย () หรือช่องว่าง ดังตัวอย่าง
(duck-shot Brian Gary Rey)
นี่เป็นการกำหนดฟิลด์ขึ้น 4 ฟิลด์ ในกรณีนี้นักล่าทั้ง 3 คนถูกฆ่าโดย duck (โหดชิบ) fact ไม่สามารถจะมี fact อื่นมาอยู่ภายใต้มันได้อีกแล้ว เช่น
(duck (shot Brian Gary Rey))
แต่ก็สามารถมีความหมายได้ ถ้าหากคำว่า “shot” เป็นชื่อฟิลด์และ Brian Gary Rey ก็เป็นชื่อฟิลด์ อักขระต่อไปนี้มีความหมายต่อ CLIPS
“ ( ) & | < ~ ; ? $
“&” “|” และ “~” ไม่สามารถใช้โดยอิสระได้ ต้องใช้ร่วมกับ symbol เสมอ อักขระบางตัวต้องใช้เฉพาะหัวท้ายของ symbol เท่านั้น เช่น
อักขระที่ไม่สามารถพิมพ์ได้ทั้งหลาย รวมทั้ง space return และ tab line-feed “ () & | < ใช้เป็นอักษรตัวแรกของ symbol ~ ; ใช้เป็น comment ? และ $? ใช้เริ่มต้น symbol
ถ้าเราเผลอใส่ “” ใน top-level เช่น ใส่ภายใต้เครื่องหมาย () CLIPS ก็จะแสดงข้อผิดพลาดออกมา ทางที่ดีควรที่จะเลี่ยงการใช้เครื่องหมายแปลกๆข้างบนใน symbol ใดๆ เพื่อป้องกันความสับสน ต่อไปนี้เป็นตัวอย่างของ symbol ที่ดี
duck
duck1
duck_soup
duck-soup
duck1-1_soup-soup
d!?#%^
symbol ชนิด string ซึ่งต้องมีเครื่องหมายคำพูดปิดหัวท้ายเสมอ เช่น
“duck”
“duck1”
“duck/soup”
“duck soup”
“duck soup is very good!!!”
ฟิลด์ต่อไปเรียกว่า numeric ฟิลด์สามารถเป็นได้ทั้งจำนวนเต็มและจำนวนทศนิยม ในกรณีที่เป็นจำนวนเต็มในภาษา list จะถือว่าเป็นจำนวนที่ยาวเสมอ ส่วนจำนวนที่เป็นจำนวนทศนิยมก็สามารถใช้คำสั่ง double-precision สำหรับจำนวนทศนิยมที่ยาวๆ จำนวนเต็มนั้นก็จะมีมากที่สุดไม่เกินจำนวนบิตของคอมพิวเตอร์ เช่นถ้ามี N บิตก็จะเก็บค่าจำนวนได้ไม่เกิน 2N สำหรับ 32 บิตก็จะเก็บจำนวนได้ ตั้งแต่ 2,147,483,648 ถึง 2,147,483,647 ถ้าเกินกว่านี้ให้ใช้ในรูปของเลขยกกำลังฐาน 10 ดังตัวอย่าง
CLIPS> (facts) CLIPS> (clear) CLIPS> (assert (number 1)) <Fact-0> CLIPS> (assert (x 1.5)) <Fact-1> CLIPS> (assert (y -1)) <Fact-2> CLIPS> (assert (z 65)) <Fact-3> CLIPS> (assert (distance 3.5e5)) <Fact-4> CLIPS> (assert (coordinates 1 2 3)) <Fact-5> CLIPS> (assert (coordinates 1 3 2)) <Fact-6> CLIPS> (facts) f-0 (number 1) f-1 (x 1.5) f-2 (y -1) f-3 (z 65) f-4 (distance 350000.0) f-5 (coordinates 1 2 3) f-6 (coordinates 1 3 2) For a total of 7 facts CLIPS>
ข้อสังเกต แต่ละจำนวนจะมี symbol ที่ขึ้นด้วยตัวอักษร ใน CLIPS 6.0 จะมีคำบางคำที่เป็นคำเฉพาะไม่ให้ใช้เป็นฟิลด์แรก ซึ่งดูได้จากภาคผนวก
fact ประกอบไปด้วยฟิลด์เดียวหรือหลายฟิลด์ fact สามารถเป็นได้ทั้งแบบเรียงลำดับและไม่เรียงลำดับ ตัวอย่างข้างบนเป็นแบบเรียงลำดับ ในภาษา CLIPS คำว่า duck-Brian เรียกว่ามีเพียง 1 ฟิลด์เพราะว่า “” นั้นเป็นการเชื่อมต่อ 2 คำนั้นเป็นคำเดียว
fact ที่มีหลายฟิลด์นั้นจะคั่นด้วยช่องว่างหรือ tab หรือ return หรือ | ก็ได้ดังตัวอย่าง
CLIPS> (clear) CLIPS> (assert (The duck says “Quack.”)) <Fact-0> CLIPS> (facts) f-0 (The duck says “Quack.”) For a total of 1 fact CLIPS> (clear) CLIPS> (assert (The duck says “Quack.” )) <Fact-0> CLIPS> (facts) f-0 (The duck says “Quack.”) For a total of 1 fact CLIPS>
Return ใช้สำหรับปรับข้อความให้อ่านง่าย ดังตัวอย่างข้างล่างก็ได้ผลเหมือนกัน
CLIPS> (clear) CLIPS> (assert (The Duck Says “Quack”)) <Fact-0> CLIPS> (facts) f-0 (The duck says “Quack”) For a total of 1 fact CLIPS>
อย่างไรก็ตาม การใส่ Return ผิดที่ก็ให้ผลต่างออกไปได้
CLIPS> (assert (The Duck Says “Quack ”)) <Fact-1> CLIPS> (facts) f-0 (The duck says “Quack.”) f-1 (The duck says “Quack ”) For a total of 2 facts CLIPS>
ในภาษา CLIPS นั้น ตัวอักษรตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่นั้นถือว่าแตกต่างกัน เช่น คำว่า (Duck) กับ (duck) ถือว่าเป็น fact ที่ต่างกัน ตัวอย่างต่อไปนี้เป็นตัวอย่างที่แสดงถึงการใช้เครื่องหมายลบหรือเครื่องหมาย Return “” โดยที่ “” แม้จะมีวรรคคั่นกลางก็ถือว่ามีฟิลด์เดียว เช่น “fudge sauce”
CLIPS> (clear) CLIPS> (assert (grocery-list ice-cream cookies candy fudge-sauce)) <Fact-0> CLIPS> (facts) f-0 (grocery-list ice-cream cookies candy fudge-sauce) For a total of 1 fact CLIPS>
จะเห็นว่า CLIPS แทนที่ return และช่องว่างเพียง 1 ตัว ซึ่งทำให้อ่านง่ายขึ้น
ความคิดเห็น