กำหนด

คำสั่ง define ใน Scheme เป็นโครงสร้างอเนกประสงค์ที่ใช้ในการสร้างการเชื่อมโยงส่วนกลางหรือท้องถิ่น โดยทั่วไปจะใช้เพื่อกำหนดตัวแปรและฟังก์ชัน ทำให้สามารถนำมาใช้ซ้ำและเข้าถึงได้ทั่วทั้งสคริปต์หรือภายในขอบเขตเฉพาะ การทำความเข้าใจ define เป็นสิ่งสำคัญสำหรับการเขียนโปรแกรม Scheme แบบโมดูลาร์ ใช้ซ้ำได้ และอ่านได้

วัตถุประสงค์ของ define

โครงสร้าง define มีจุดประสงค์หลายประการ:

  • การกำหนดตัวแปร: กำหนดค่าให้กับชื่อตัวแปร ทำให้สามารถใช้ได้ในภายหลัง
  • การกำหนดฟังก์ชัน: สร้างขั้นตอนที่นำมาใช้ซ้ำได้ซึ่งห่อหุ้มตรรกะเฉพาะ
  • คำจำกัดความในเครื่อง: เมื่อใช้ภายในฟังก์ชัน define จะสร้างการเชื่อมโยงในเครื่องที่ไม่ส่งผลต่อเนมสเปซส่วนกลาง

การกำหนดตัวแปรด้วย define

การใช้งานพื้นฐานของ define คือการสร้างตัวแปรที่เก็บค่าคงที่หรือค่าที่คำนวณได้

ไวยากรณ์

(define variable-name value)

ตัวอย่าง: การกำหนดค่าคงที่

(define pi 3.14159)
(* pi 2) ;; Computes 2π

ผลลัพธ์: 6.28318


การกำหนดฟังก์ชันด้วย define

คุณสามารถใช้ define เพื่อสร้างขั้นตอนที่นำมาใช้ซ้ำได้

ไวยากรณ์

(define (function-name parameter1 parameter2 ...)
  body-expression)

ตัวอย่าง: การกำหนดฟังก์ชันอย่างง่าย

(define (square x)
  (* x x))
(square 4) ;; Computes 4²

ผลลัพธ์: 16


คำจำกัดความท้องถิ่นด้วย define

เมื่อใช้ภายในฟังก์ชัน define จะสร้างการเชื่อมโยงเฉพาะที่สามารถเข้าถึงได้ภายในฟังก์ชันปิดล้อมเท่านั้น วิธีนี้จะหลีกเลี่ยงไม่ให้เนมสเปซส่วนกลางเสียหายและช่วยจัดระเบียบโค้ดของคุณ

ตัวอย่าง: ฟังก์ชั่น Local Helper

(define (process-values a b c)
  (define (square x) (* x x))  ;; Local helper function
  (define (cube x) (* x x x))  ;; Local helper function
  (+ (square a) (cube b) (square c)))
(process-values 2 3 4)

ผลลัพธ์: 41 (คำนวณ (2^2 + 3^3 + 4^2))


คุณสมบัติหลักของ define

  1. ขอบเขตระดับโลกหรือระดับท้องถิ่น:

    • เมื่อใช้ที่ระดับบนสุด define จะสร้างตัวแปรหรือฟังก์ชันส่วนกลาง
    • เมื่อใช้ภายในฟังก์ชันอื่น define จะสร้างการเชื่อมโยงในเครื่อง
  2. การนำกลับมาใช้ใหม่:

    • ฟังก์ชันที่กำหนดด้วย define สามารถนำมาใช้ซ้ำได้หลายครั้งในบริบทที่ต่างกัน
  3. ปรับปรุงความสามารถในการอ่าน:

    • การแบ่งลอจิกออกเป็นฟังก์ชันเล็กๆ ที่มีชื่อดี ช่วยเพิ่มความชัดเจนและความสามารถในการบำรุงรักษาโค้ดของคุณ

ความแตกต่างระหว่าง define และ let

มุมมองdefinelet
วัตถุประสงค์สร้างการเชื่อมโยงส่วนกลางหรือท้องถิ่นสำหรับตัวแปรหรือฟังก์ชันสร้างการเชื่อมโยงชั่วคราวในขอบเขตที่แปลเป็นภาษาท้องถิ่น
ขอบเขตทั่วโลกเมื่ออยู่ที่ระดับบนสุด ท้องถิ่นเมื่ออยู่ในฟังก์ชันอื่นอยู่ในบล็อก let เสมอ
การนำกลับมาใช้ใหม่ฟังก์ชันและตัวแปรสามารถนำมาใช้ซ้ำได้หลายแห่งตัวแปรถูกผูกไว้ชั่วคราวสำหรับบล็อกเดียว
ไวยากรณ์กำหนดตัวแปรหรือฟังก์ชันอย่างชัดเจนรวมการเชื่อมโยงตัวแปรเข้ากับการประเมินนิพจน์