ข้ามไปยังเนื้อหา
คู่มือ Varlig
หน้าแรกของ Varlig

ฟังก์ชันที่กำหนดเอง

เมื่อคุณพิมพ์สูตรเดียวกันซ้ําแล้วซ้ําเล่าด้วยตัวเลขที่แตกต่างกัน ให้เปลี่ยนเป็นฟังก์ชัน คุณตั้งชื่อสูตรและอินพุตหนึ่งครั้ง จากนั้นเรียกมันทุกที่ที่คุณต้องการคําตอบ: เครื่องคํานวณทิป การตรวจสอบค่าดัชนีมวลกาย การคาดการณ์การออม หรือใบแจ้งหนี้

หน้านี้อธิบายการนิยามและเรียกใช้ฟังก์ชัน การใช้ตัวแปรอื่นในโน้ต เงื่อนไข การเรียกซ้ำ และข้อจำกัด สำหรับฟังก์ชันที่มาพร้อม Varlig เช่น sqrt และ round ดูเอกสารอ้างอิงฟังก์ชันในตัว

การกําหนดและเรียกฟังก์ชัน

เขียนชื่อของฟังก์ชัน พารามิเตอร์ในวงเล็บ เครื่องหมายเท่ากับ และสูตร จากนั้นเรียกมันด้วยค่าในลําดับเดียวกัน:

calc
tip(bill, pct) = bill * pct
tip($48, 15%) ได้ผลลัพธ์เป็น $7.20
tip($120, 12.5%) ได้ผลลัพธ์เป็น $15.00
tip($36 + $12, 15%) ได้ผลลัพธ์เป็น $7.20

บรรทัดนิยามไม่แสดงคำตอบ ทุกครั้งที่เรียกใช้ ระบบจะแทน bill และ pct ด้วยค่าที่ส่งมาแล้วคำนวณสูตร อาร์กิวเมนต์อาจเป็นนิพจน์คำนวณทั้งชุด เช่น $36 + $12 ด้านบน

อาร์กิวเมนต์เป็นค่าที่มีข้อมูลครบ ไม่ใช่เพียงตัวเลข หน่วยและสกุลเงินจึงถูกนำไปคำนวณต่อในสูตรด้วย:

calc
bmi(weight, height) = weight / height^2
bmi(81 kg, 1.8 m) ได้ผลลัพธ์เป็น 25 kg/m²

หน่วยจะถูกคงไว้ตามที่คุณให้ ดังนั้นคำตอบของ bmi(81 kg, 180 cm) จะเป็นหน่วยกิโลกรัม/เซนติเมตร² เพื่อให้ได้หน่วยเดียวกันไม่ว่าคุณจะป้อนอะไร ให้แปลงภายในฟังก์ชัน:

calc
bmi(weight, height) = (weight / height^2) in kg/m^2
bmi(81 kg, 180 cm) ได้ผลลัพธ์เป็น 25 kg/m²
bmi(80 kg, 5.9 ft) ได้ผลลัพธ์เป็น 24.7375131668 kg/m²

ฟังก์ชันไม่มีพารามิเตอร์ก็ได้ ให้เขียนวงเล็บว่างทั้งตอนนิยามและตอนเรียกใช้:

calc
standard_vat() = 20%
£120 * standard_vat() ได้ผลลัพธ์เป็น £24.00

ตัวแปรธรรมดา เช่น standard_vat = 20% มักจะทํางานเดียวกันด้วยการพิมพ์น้อยลง

ชื่อและพารามิเตอร์

  • ชื่อฟังก์ชันและพารามิเตอร์เป็นคําเดียว ใช้ตัวอักษร ตัวเลข และขีดล่าง เช่น net_pay หรือ bmi2 โดยไม่มีช่องว่าง หากคุณเขียน area of circle(r) = pi * r^2 บรรทัดจะแนะนําชื่อที่จะใช้แทน: area_of_circle
  • ชื่อฟังก์ชันไม่แยกตัวพิมพ์ใหญ่เล็ก เช่น เมื่อนิยาม Tip(bill, pct) แล้ว เรียกด้วย tip($48, 15%) ได้
  • พารามิเตอร์แต่ละตัวต้องมีชื่อไม่ซ้ำกัน f(a, a) = a จึงเกิดข้อผิดพลาด
  • ฟังก์ชันสามารถมีพารามิเตอร์ได้ถึง 32 ตัว
  • คุณตั้งชื่อฟังก์ชันซ้ำกับฟังก์ชันในตัวไม่ได้ round(x) = … หรือ sqrt(x) = … จะแสดงข้อผิดพลาดแทนการแทนที่ฟังก์ชันเดิม แต่ตัวแปรทั่วไปยังใช้ชื่อเหล่านี้ได้ เช่น floor = 12 m² ดูชื่อ
  • ชื่อที่ใช้กันในสเปรดชีตอย่าง avg, total และ stdev สามารถนำมาตั้งชื่อฟังก์ชันเองได้ เช่น หากนิยาม total(order) ระบบจะใช้ฟังก์ชันที่คุณนิยามไว้
  • ฟังก์ชันและตัวแปรสามารถแชร์ชื่อได้ rate อ่านตัวแปรและ rate(5) เรียกฟังก์ชัน
  • เรียกฟังก์ชันด้วยวงเล็บเสมอ หากเขียนชื่อฟังก์ชันเดี่ยว ๆ โดยไม่มีตัวแปรชื่อเดียวกัน จะไม่แสดงผล ยกเว้น sum, total, subtotal, grand total, average, max และ min ซึ่งคำนวณค่านั้นจากบรรทัดด้านบน ดูการรวมค่าบรรทัดด้านบน

จุลภาคในอาร์กิวเมนต์

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

calc
tip(bill, pct) = bill * pct
tip($1,200, 15%) ได้ผลลัพธ์เป็น $180.00
tip($1200,15%) ได้ผลลัพธ์เป็น $180.00

หากการแยกด้วยช่องว่างให้จำนวนค่าน้อยกว่าที่ฟังก์ชันต้องการ ระบบจะใช้จุลภาคทุกตัวเป็นตัวคั่นตามตัวอย่างการเรียกครั้งที่สอง ใช้จุดเป็นเครื่องหมายทศนิยม เช่น tip($48, 12.5%)

การใช้ชื่ออื่นในโน้ตของคุณ

ฟังก์ชันใช้ตัวแปรจากโน้ตได้ และจะอ่านค่าปัจจุบันของตัวแปรทุกครั้งที่เรียกใช้:

calc
vat = 20%
with_vat(price) = price * (1 + vat)
with_vat(£50) ได้ผลลัพธ์เป็น £60.00
vat = 5%
with_vat(£50) ได้ผลลัพธ์เป็น £52.50

ตัวแปรต้องมีอยู่แล้วตอนนิยามฟังก์ชัน จึงต้องเขียน vat = 20% ไว้เหนือ with_vat หากยังไม่มีตัวแปร บรรทัดนิยามจะแสดงข้อผิดพลาด

พารามิเตอร์มีขอบเขตเฉพาะภายในฟังก์ชัน พารามิเตอร์ชื่อ price จะไม่อ่านหรือเปลี่ยนค่าตัวแปรชื่อ price ที่อื่นในโน้ต:

calc
price = £10
double(price) = price * 2
double(£3) ได้ผลลัพธ์เป็น £6.00
price ได้ผลลัพธ์เป็น £10.00

เช่นเดียวกับตัวแปร ฟังก์ชันที่นิยามในบล็อกคำนวณหนึ่งใช้ในบล็อกถัดไปของโน้ตเดียวกันได้ Varlig อ่านโน้ตจากบนลงล่าง จึงต้องนิยามฟังก์ชันไว้เหนือบรรทัดแรกที่เรียกใช้ หากเรียกก่อนบรรทัดนิยาม จะไม่แสดงคำตอบ

ฟังก์ชันที่เรียกฟังก์ชันอื่นๆ

ฟังก์ชันเล็ก ๆ เรียกใช้ต่อกันได้:

calc
day_rate = £400
fee(days) = days * day_rate
invoice(days) = fee(days) * 1.2
invoice(5) ได้ผลลัพธ์เป็น £2,400.00

ฟังก์ชันจะจำรุ่นของฟังก์ชันช่วยที่มีอยู่ในขณะนิยาม หากนิยามฟังก์ชันช่วยชื่อเดิมอีกครั้งด้านล่าง ฟังก์ชันที่นิยามไว้ก่อนหน้ายังคงใช้รุ่นเดิม:

calc
shipping(order) = £4.95
total(order) = order + shipping(order)
shipping(order) = £2.95
total(£30) ได้ผลลัพธ์เป็น £34.95
shipping(£30) ได้ผลลัพธ์เป็น £2.95

หากต้องการใช้ shipping รุ่นใหม่ ให้นิยาม total อีกครั้งใต้บรรทัดนั้น กรณีนี้ต่างจากการแก้นิยามที่ตำแหน่งเดิม เพราะเมื่อแก้ที่เดิม Varlig จะคำนวณโน้ตใหม่จากด้านบน และทุกบรรทัดด้านล่างจะใช้รุ่นที่แก้แล้ว

ฟังก์ชันยังเรียกฟังก์ชันช่วยที่นิยามไว้ด้านล่างได้ด้วย ในกรณีนี้จะใช้รุ่นของฟังก์ชันช่วยที่มีอยู่ขณะเรียกใช้ ดังนั้นต้องนิยามฟังก์ชันช่วยให้เรียบร้อยก่อนเรียกฟังก์ชันชั้นนอก:

calc
checkout(order) = order + delivery(order)
delivery(order) = if order >= £40 then £0 else £3.50
checkout(£25) ได้ผลลัพธ์เป็น £28.50
checkout(£60) ได้ผลลัพธ์เป็น £60.00

เงื่อนไข

ใช้ if … then … else … เพื่อเลือกระหว่างผลลัพธ์ สร้าง if อีกตัวหนึ่งหลังจาก else สำหรับกรณีมากกว่าสองกรณี:

calc
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20
postage(90 g) ได้ผลลัพธ์เป็น £0.85
postage(500 g) ได้ผลลัพธ์เป็น £1.55
postage(1.2 kg) ได้ผลลัพธ์เป็น £3.20

ระบบคำนวณเฉพาะส่วนที่ตรงกับเงื่อนไขเท่านั้น จึงใช้ป้องกันการคำนวณที่อาจผิดพลาด เช่น การหารด้วยศูนย์ได้:

calc
per_person(total, people) = if people > 0 then total / people else £0
per_person(£90, 3) ได้ผลลัพธ์เป็น £30.00
per_person(£90, 0) ได้ผลลัพธ์เป็น £0.00

การเรียกซ้ำ

ฟังก์ชันเรียกตัวเองได้ หากมีเงื่อนไขที่ทำให้หยุดในที่สุด ตัวอย่างนี้นับจำนวนการจับมือเมื่อทุกคนในกลุ่มจับมือกับคนอื่นคนละหนึ่งครั้ง:

calc
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)
handshakes(6) ได้ผลลัพธ์เป็น 15
handshakes(10) ได้ผลลัพธ์เป็น 45

การเรียกแต่ละครั้งจะซ้อนลึกขึ้นหนึ่งระดับ และอนุญาตให้มีการเรียกซ้อนสูงสุด 12 ครั้ง handshakes(12) ยังใช้งานได้ แต่ handshakes(13) จะแสดงข้อความ Error: calculation limit ฟังก์ชันที่ไม่มีกรณีการหยุดทำงานจะได้รับการยอมรับเมื่อคุณกำหนดฟังก์ชันนั้น และจะถึงขีดจำกัดเดียวกันเมื่อคุณเรียกใช้งาน ฟังก์ชันสองฟังก์ชันสามารถเรียกใช้งานกันและกันได้ภายในขีดจำกัดเดียวกัน

สำหรับการนับจำนวนในชีวิตประจำวัน ฟังก์ชันที่ติดตั้งมานั้นรวดเร็วกว่าและไม่มีขีดจำกัดเช่นนั้น combination(10, 2) ยังให้ 45 อีกด้วย และ factorial(n), หรือ n!, ครอบคลุมตัวอย่างการเรียกซ้ำแบบคลาสสิก

รายการ เมทริกซ์ และอื่นๆ

อาร์กิวเมนต์เป็นรายการ เมทริกซ์ หรือจำนวนเชิงซ้อนได้ และนิพจน์ภายในฟังก์ชันใช้ฟังก์ชันในตัวใดก็ได้:

calc
spread(scores) = max(scores) - min(scores)
spread([12, 18, 9, 21]) ได้ผลลัพธ์เป็น 12

นิพจน์ภายในยังมีการหาผลรวมหรือการแก้สมการที่ใช้ตัวแปรภายในของตัวเองได้ ดูรายการและสถิติและผลรวม การแก้สมการ และแคลคูลัส

ข้อควรระวัง

  • เขียนเลขยกกำลังด้วย ^ ภายในฟังก์ชันไม่รองรับ x² นอกจากนี้ชื่อพารามิเตอร์สั้น ๆ อาจตรงกับหน่วย เช่น ใน w / h² คำว่า h² หมายถึงชั่วโมงยกกำลังสอง ไม่ใช่พารามิเตอร์ h ให้เขียน w / h^2
  • ตรวจสอบจำนวนอาร์กิวเมนต์ การเรียกใช้ tip($48) เมื่อฟังก์ชันคาดหวังค่าสองค่าแสดงข้อผิดพลาด
  • ราคาที่ไม่ระบุหน่วยจะถูกอ่านเป็นราคาต่อหน่วย ใน oats(amount) = amount / 1 kg * £0.95 ค่า £0.95 เป็นราคาต่อกิโลกรัม ทุกครั้งที่เรียกใช้จะมีคำอธิบาย เมื่อนำตัวชี้ไปวางเหนือคำตอบจะเห็นว่า “£0.95 ใน oats ถูกตีความเป็นราคาต่อ kg ให้เขียน £0.95/kg ตรงนั้นเพื่อระบุให้ชัดเจน” เมื่อเขียนอัตราให้ครบในนิยาม ข้อความแจ้งนี้จะหายไป
  • หนึ่งบรรทัด หนึ่งสูตร นิยามคือนิพจน์เดียวบนบรรทัดเดียว สำหรับการคำนวณที่มีหลายขั้นตอน ให้กำหนดฟังก์ชันขนาดเล็กสำหรับแต่ละขั้นตอนและรวมกัน
  • การนิยามใหม่ที่เสียหายจะคงเวอร์ชันเดิมไว้ หากนิยามใหม่ของ tip มีข้อผิดพลาด บรรทัดจะแสดงข้อผิดพลาด และ tip ที่ทำงานได้ก่อนหน้านี้ยังคงใช้งานได้
  • คำตอบอาจเปลี่ยนเมื่อโน้ตคำนวณใหม่ ระบบจะประเมินการเรียกฟังก์ชันใหม่ทุกครั้ง ฟังก์ชันที่ใช้ random หรือวันที่ปัจจุบันจึงอาจให้คำตอบใหม่
  • ข้อผิดพลาดจะส่งต่อออกมา หากอาร์กิวเมนต์ทำให้สูตรผิดพลาด เช่น หารด้วยศูนย์ การเรียกฟังก์ชันจะแสดงข้อผิดพลาดนั้น

ขีดจํากัด

รายการ ขีดจำกัด
พารามิเตอร์ต่อฟังก์ชัน 32
การเรียกซ้อน (ฟังก์ชันที่เรียกตัวเองหรืออื่น) 12
จำนวนครั้งที่เรียกฟังก์ชันระหว่างประมวลผลการเรียกระดับบนสุดหนึ่งครั้ง 16,384
ฟังก์ชันที่นิยามในโน้ต 1,024

เมื่อถึงขีดจำกัด จะแสดง Error: calculation limit ส่วนอื่นของโน้ตยังทำงานได้ ดูขีดจำกัดทั้งหมดในข้อผิดพลาด การวินิจฉัย และขีดจำกัด

ตัวอย่างการใช้ร่วมกัน

ตัวอย่างนี้เป็นใบแจ้งหนี้สำหรับงานฟรีแลนซ์ โดยตั้งอัตราค่าจ้างและ VAT เป็นตัวแปรไว้ด้านบน แล้วใช้ฟังก์ชันเล็ก ๆ สามฟังก์ชันคำนวณ:

calc
# March invoice
day_rate = £450
vat = 20%
fee(days) = days * day_rate
with_vat(amount) = amount * (1 + vat)
late_fee(amount, days_late) = if days_late > 30 then amount * 2% else £0
design = fee(8) ได้ผลลัพธ์เป็น £3,600.00
build = fee(4.5) ได้ผลลัพธ์เป็น £2,025.00
subtotal = design + build ได้ผลลัพธ์เป็น £5,625.00
with_vat(subtotal) ได้ผลลัพธ์เป็น £6,750.00
late_fee(with_vat(subtotal), 45) ได้ผลลัพธ์เป็น £135.00

เปลี่ยน day_rate หรือ vat แล้วทุกบรรทัดด้านล่างจะอัปเดต เมื่อลูกค้าชำระล่าช้า เรียกฟังก์ชันเพียงครั้งเดียวเพื่อเพิ่มค่าธรรมเนียม