ฟังก์ชันที่กำหนดเอง
เมื่อคุณพิมพ์สูตรเดียวกันซ้ําแล้วซ้ําเล่าด้วยตัวเลขที่แตกต่างกัน ให้เปลี่ยนเป็นฟังก์ชัน คุณตั้งชื่อสูตรและอินพุตหนึ่งครั้ง จากนั้นเรียกมันทุกที่ที่คุณต้องการคําตอบ: เครื่องคํานวณทิป การตรวจสอบค่าดัชนีมวลกาย การคาดการณ์การออม หรือใบแจ้งหนี้
หน้านี้อธิบายการนิยามและเรียกใช้ฟังก์ชัน การใช้ตัวแปรอื่นในโน้ต เงื่อนไข การเรียกซ้ำ และข้อจำกัด สำหรับฟังก์ชันที่มาพร้อม Varlig เช่น sqrt และ round ดูเอกสารอ้างอิงฟังก์ชันในตัว
การกําหนดและเรียกฟังก์ชัน
เขียนชื่อของฟังก์ชัน พารามิเตอร์ในวงเล็บ เครื่องหมายเท่ากับ และสูตร จากนั้นเรียกมันด้วยค่าในลําดับเดียวกัน:
tip(bill, pct) = bill * pcttip($48, 15%) ได้ผลลัพธ์เป็น $7.20tip($120, 12.5%) ได้ผลลัพธ์เป็น $15.00tip($36 + $12, 15%) ได้ผลลัพธ์เป็น $7.20บรรทัดนิยามไม่แสดงคำตอบ ทุกครั้งที่เรียกใช้ ระบบจะแทน bill และ pct ด้วยค่าที่ส่งมาแล้วคำนวณสูตร อาร์กิวเมนต์อาจเป็นนิพจน์คำนวณทั้งชุด เช่น $36 + $12 ด้านบน
อาร์กิวเมนต์เป็นค่าที่มีข้อมูลครบ ไม่ใช่เพียงตัวเลข หน่วยและสกุลเงินจึงถูกนำไปคำนวณต่อในสูตรด้วย:
bmi(weight, height) = weight / height^2bmi(81 kg, 1.8 m) ได้ผลลัพธ์เป็น 25 kg/m²หน่วยจะถูกคงไว้ตามที่คุณให้ ดังนั้นคำตอบของ bmi(81 kg, 180 cm) จะเป็นหน่วยกิโลกรัม/เซนติเมตร² เพื่อให้ได้หน่วยเดียวกันไม่ว่าคุณจะป้อนอะไร ให้แปลงภายในฟังก์ชัน:
bmi(weight, height) = (weight / height^2) in kg/m^2bmi(81 kg, 180 cm) ได้ผลลัพธ์เป็น 25 kg/m²bmi(80 kg, 5.9 ft) ได้ผลลัพธ์เป็น 24.7375131668 kg/m²ฟังก์ชันไม่มีพารามิเตอร์ก็ได้ ให้เขียนวงเล็บว่างทั้งตอนนิยามและตอนเรียกใช้:
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ซึ่งคำนวณค่านั้นจากบรรทัดด้านบน ดูการรวมค่าบรรทัดด้านบน
จุลภาคในอาร์กิวเมนต์
จุลภาคตามด้วยช่องว่างใช้คั่นอาร์กิวเมนต์ ส่วนจุลภาคที่ตามด้วยตัวเลขสามหลักพอดีใช้แบ่งหลักพัน คุณจึงเขียนจำนวนเงินตามปกติได้:
tip(bill, pct) = bill * pcttip($1,200, 15%) ได้ผลลัพธ์เป็น $180.00tip($1200,15%) ได้ผลลัพธ์เป็น $180.00หากการแยกด้วยช่องว่างให้จำนวนค่าน้อยกว่าที่ฟังก์ชันต้องการ ระบบจะใช้จุลภาคทุกตัวเป็นตัวคั่นตามตัวอย่างการเรียกครั้งที่สอง ใช้จุดเป็นเครื่องหมายทศนิยม เช่น tip($48, 12.5%)
การใช้ชื่ออื่นในโน้ตของคุณ
ฟังก์ชันใช้ตัวแปรจากโน้ตได้ และจะอ่านค่าปัจจุบันของตัวแปรทุกครั้งที่เรียกใช้:
vat = 20%with_vat(price) = price * (1 + vat)with_vat(£50) ได้ผลลัพธ์เป็น £60.00vat = 5%with_vat(£50) ได้ผลลัพธ์เป็น £52.50ตัวแปรต้องมีอยู่แล้วตอนนิยามฟังก์ชัน จึงต้องเขียน vat = 20% ไว้เหนือ with_vat หากยังไม่มีตัวแปร บรรทัดนิยามจะแสดงข้อผิดพลาด
พารามิเตอร์มีขอบเขตเฉพาะภายในฟังก์ชัน พารามิเตอร์ชื่อ price จะไม่อ่านหรือเปลี่ยนค่าตัวแปรชื่อ price ที่อื่นในโน้ต:
price = £10double(price) = price * 2double(£3) ได้ผลลัพธ์เป็น £6.00price ได้ผลลัพธ์เป็น £10.00เช่นเดียวกับตัวแปร ฟังก์ชันที่นิยามในบล็อกคำนวณหนึ่งใช้ในบล็อกถัดไปของโน้ตเดียวกันได้ Varlig อ่านโน้ตจากบนลงล่าง จึงต้องนิยามฟังก์ชันไว้เหนือบรรทัดแรกที่เรียกใช้ หากเรียกก่อนบรรทัดนิยาม จะไม่แสดงคำตอบ
ฟังก์ชันที่เรียกฟังก์ชันอื่นๆ
ฟังก์ชันเล็ก ๆ เรียกใช้ต่อกันได้:
day_rate = £400fee(days) = days * day_rateinvoice(days) = fee(days) * 1.2invoice(5) ได้ผลลัพธ์เป็น £2,400.00ฟังก์ชันจะจำรุ่นของฟังก์ชันช่วยที่มีอยู่ในขณะนิยาม หากนิยามฟังก์ชันช่วยชื่อเดิมอีกครั้งด้านล่าง ฟังก์ชันที่นิยามไว้ก่อนหน้ายังคงใช้รุ่นเดิม:
shipping(order) = £4.95total(order) = order + shipping(order)shipping(order) = £2.95total(£30) ได้ผลลัพธ์เป็น £34.95shipping(£30) ได้ผลลัพธ์เป็น £2.95หากต้องการใช้ shipping รุ่นใหม่ ให้นิยาม total อีกครั้งใต้บรรทัดนั้น กรณีนี้ต่างจากการแก้นิยามที่ตำแหน่งเดิม เพราะเมื่อแก้ที่เดิม Varlig จะคำนวณโน้ตใหม่จากด้านบน และทุกบรรทัดด้านล่างจะใช้รุ่นที่แก้แล้ว
ฟังก์ชันยังเรียกฟังก์ชันช่วยที่นิยามไว้ด้านล่างได้ด้วย ในกรณีนี้จะใช้รุ่นของฟังก์ชันช่วยที่มีอยู่ขณะเรียกใช้ ดังนั้นต้องนิยามฟังก์ชันช่วยให้เรียบร้อยก่อนเรียกฟังก์ชันชั้นนอก:
checkout(order) = order + delivery(order)delivery(order) = if order >= £40 then £0 else £3.50checkout(£25) ได้ผลลัพธ์เป็น £28.50checkout(£60) ได้ผลลัพธ์เป็น £60.00เงื่อนไข
ใช้ if … then … else … เพื่อเลือกระหว่างผลลัพธ์ สร้าง if อีกตัวหนึ่งหลังจาก else สำหรับกรณีมากกว่าสองกรณี:
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20postage(90 g) ได้ผลลัพธ์เป็น £0.85postage(500 g) ได้ผลลัพธ์เป็น £1.55postage(1.2 kg) ได้ผลลัพธ์เป็น £3.20ระบบคำนวณเฉพาะส่วนที่ตรงกับเงื่อนไขเท่านั้น จึงใช้ป้องกันการคำนวณที่อาจผิดพลาด เช่น การหารด้วยศูนย์ได้:
per_person(total, people) = if people > 0 then total / people else £0per_person(£90, 3) ได้ผลลัพธ์เป็น £30.00per_person(£90, 0) ได้ผลลัพธ์เป็น £0.00การเรียกซ้ำ
ฟังก์ชันเรียกตัวเองได้ หากมีเงื่อนไขที่ทำให้หยุดในที่สุด ตัวอย่างนี้นับจำนวนการจับมือเมื่อทุกคนในกลุ่มจับมือกับคนอื่นคนละหนึ่งครั้ง:
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)handshakes(6) ได้ผลลัพธ์เป็น 15handshakes(10) ได้ผลลัพธ์เป็น 45การเรียกแต่ละครั้งจะซ้อนลึกขึ้นหนึ่งระดับ และอนุญาตให้มีการเรียกซ้อนสูงสุด 12 ครั้ง handshakes(12) ยังใช้งานได้ แต่ handshakes(13) จะแสดงข้อความ Error: calculation limit ฟังก์ชันที่ไม่มีกรณีการหยุดทำงานจะได้รับการยอมรับเมื่อคุณกำหนดฟังก์ชันนั้น และจะถึงขีดจำกัดเดียวกันเมื่อคุณเรียกใช้งาน ฟังก์ชันสองฟังก์ชันสามารถเรียกใช้งานกันและกันได้ภายในขีดจำกัดเดียวกัน
สำหรับการนับจำนวนในชีวิตประจำวัน ฟังก์ชันที่ติดตั้งมานั้นรวดเร็วกว่าและไม่มีขีดจำกัดเช่นนั้น combination(10, 2) ยังให้ 45 อีกด้วย และ factorial(n), หรือ n!, ครอบคลุมตัวอย่างการเรียกซ้ำแบบคลาสสิก
รายการ เมทริกซ์ และอื่นๆ
อาร์กิวเมนต์เป็นรายการ เมทริกซ์ หรือจำนวนเชิงซ้อนได้ และนิพจน์ภายในฟังก์ชันใช้ฟังก์ชันในตัวใดก็ได้:
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 เป็นตัวแปรไว้ด้านบน แล้วใช้ฟังก์ชันเล็ก ๆ สามฟังก์ชันคำนวณ:
# March invoiceday_rate = £450vat = 20%fee(days) = days * day_ratewith_vat(amount) = amount * (1 + vat)late_fee(amount, days_late) = if days_late > 30 then amount * 2% else £0design = fee(8) ได้ผลลัพธ์เป็น £3,600.00build = fee(4.5) ได้ผลลัพธ์เป็น £2,025.00subtotal = design + build ได้ผลลัพธ์เป็น £5,625.00with_vat(subtotal) ได้ผลลัพธ์เป็น £6,750.00late_fee(with_vat(subtotal), 45) ได้ผลลัพธ์เป็น £135.00เปลี่ยน day_rate หรือ vat แล้วทุกบรรทัดด้านล่างจะอัปเดต เมื่อลูกค้าชำระล่าช้า เรียกฟังก์ชันเพียงครั้งเดียวเพื่อเพิ่มค่าธรรมเนียม