Hàm tự định nghĩa
Khi bạn gõ đi gõ lại cùng một công thức với các số khác nhau, hãy biến nó thành một hàm. Bạn đặt tên cho công thức và đầu vào của nó một lần, sau đó gọi nó ở bất cứ nơi nào bạn cần câu trả lời: máy tính tiền boa, kiểm tra BMI, dự báo tiết kiệm hoặc hóa đơn.
Trang này bao gồm việc xác định và gọi các hàm, cách chúng sử dụng các tên khác trong ghi chú của bạn, điều kiện và đệ quy, và các giới hạn áp dụng. Đối với các hàm đi kèm với Varlig, chẳng hạn như sqrt và round, hãy xem tham chiếu chức năng tích hợp.
Định nghĩa và gọi một hàm
Viết tên của hàm, các tham số của nó trong ngoặc đơn, dấu bằng và công thức. Sau đó gọi nó với các giá trị theo cùng một thứ tự:
tip(bill, pct) = bill * pcttip($48, 15%) cho kết quả $7.20tip($120, 12.5%) cho kết quả $15.00tip($36 + $12, 15%) cho kết quả $7.20Dòng định nghĩa không hiển thị kết quả. Mỗi lời gọi hàm thay bill và pct bằng các giá trị bạn đưa vào rồi tính công thức. Một đối số có thể là cả một phép tính, như $36 + $12 ở trên.
Các đối số là các giá trị đầy đủ, không chỉ là số, vì vậy các đơn vị và tiền tệ được thực hiện thông qua công thức:
bmi(weight, height) = weight / height^2bmi(81 kg, 1.8 m) cho kết quả 25 kg/m²Các đơn vị được giữ khi bạn đưa ra chúng, vì vậy bmi(81 kg, 180 cm) trả lời bằng kg/cm². Để có được cùng một đơn vị bất cứ thứ gì bạn chuyển vào, hãy chuyển đổi bên trong hàm:
bmi(weight, height) = (weight / height^2) in kg/m^2bmi(81 kg, 180 cm) cho kết quả 25 kg/m²bmi(80 kg, 5.9 ft) cho kết quả 24.7375131668 kg/m²Một hàm cũng có thể không có tham số. Viết cặp ngoặc đơn rỗng cả khi định nghĩa lẫn khi gọi hàm:
standard_vat() = 20%£120 * standard_vat() cho kết quả £24.00Một biến đơn giản, chẳng hạn như standard_vat = 20%, thường thực hiện công việc tương tự với việc gõ ít hơn.
Tên và tham số
- Tên hàm và tham số là các từ đơn lẻ. Sử dụng các chữ cái, chữ số và dấu gạch dưới, chẳng hạn như
net_payhoặcbmi2, không có khoảng trắng. Nếu bạn viếtarea of circle(r) = pi * r^2, dòng đề xuất tên để sử dụng thay thế:area_of_circle. - Tên hàm không phân biệt chữ hoa và chữ thường: sau khi định nghĩa
Tip(bill, pct), bạn có thể gọitip($48, 15%). - Mỗi tham số cần tên riêng của nó.
f(a, a) = alà một lỗi. - Một hàm có thể có tới 32 tham số.
- Bạn không thể sử dụng lại tên của một hàm tích hợp sẵn.
round(x) = …hoặcsqrt(x) = …sẽ hiển thị lỗi thay vì thay thế nó. Một biến đơn giản vẫn có thể sử dụng một trong những tên đó, chẳng hạn nhưfloor = 12 m²; xem Tên. - Bạn được phép dùng các tên quen thuộc trong bảng tính là
avg,totalvàstdev. Nếu định nghĩatotal(order)riêng, phiên bản của bạn sẽ được chạy. - Một hàm và một biến có thể chia sẻ tên.
rateđọc biến vàrate(5)gọi hàm. - Luôn gọi một hàm bằng dấu ngoặc đơn. Tên hàm chỉ riêng nó, không có biến cùng tên, sẽ không hiển thị gì. Các ngoại lệ là
sum,total,subtotal,grand total,average,maxvàmin, chúng tính toán con số đó cho các dòng trên chúng; xem Cộng các dòng trên.
Dấu phẩy trong đối số
Dấu phẩy theo sau là dấu cách ngăn cách các đối số và dấu phẩy theo sau chính xác ba chữ số nhóm hàng nghìn, vì vậy bạn có thể viết số tiền theo cách bạn thường làm:
tip(bill, pct) = bill * pcttip($1,200, 15%) cho kết quả $180.00tip($1200,15%) cho kết quả $180.00Khi một hàm cần nhiều giá trị hơn khoảng trắng cho nó, mọi dấu phẩy sẽ tách ra, như trong lần gọi thứ hai. Sử dụng dấu thập phân cho các phân số, như trong tip($48, 12.5%).
Sử dụng các tên khác trong ghi chú của bạn
Một hàm có thể sử dụng các biến từ ghi chú của bạn. Nó đọc giá trị hiện tại của chúng mỗi khi bạn gọi nó:
vat = 20%with_vat(price) = price * (1 + vat)with_vat(£50) cho kết quả £60.00vat = 5%with_vat(£50) cho kết quả £52.50Biến phải đã tồn tại khi bạn xác định hàm, vì vậy hãy đặt vat = 20% lên trên with_vat. Nếu nó chưa tồn tại, dòng định nghĩa hiển thị lỗi.
Các tham số là cục bộ đối với hàm. Một tham số được gọi là price không đọc hoặc thay đổi một biến được gọi là price ở nơi khác trong ghi chú:
price = £10double(price) = price * 2double(£3) cho kết quả £6.00price cho kết quả £10.00Giống như biến, hàm định nghĩa trong một khối tính toán dùng được trong các khối sau của cùng ghi chú. Varlig xử lý ghi chú từ trên xuống, nên hãy đặt định nghĩa hàm trước dòng đầu tiên gọi nó. Lời gọi nằm trên định nghĩa không hiển thị kết quả.
Các hàm gọi các hàm khác
Các hàm nhỏ có thể kết hợp với nhau:
day_rate = £400fee(days) = days * day_rateinvoice(days) = fee(days) * 1.2invoice(5) cho kết quả £2,400.00Một hàm ghi nhớ phiên bản của hàm phụ đã tồn tại tại thời điểm bạn định nghĩa nó. Nếu bạn định nghĩa lại hàm phụ ở phía dưới, các hàm được định nghĩa trước đó vẫn dùng phiên bản cũ:
shipping(order) = £4.95total(order) = order + shipping(order)shipping(order) = £2.95total(£30) cho kết quả £34.95shipping(£30) cho kết quả £2.95Để lấy shipping mới, hãy định nghĩa lại total bên dưới nó. Việc chỉnh sửa định nghĩa tại chỗ không gây ra điều này. Varlig sẽ tính lại ghi chú từ đầu, vì vậy mọi thứ bên dưới sẽ sử dụng phiên bản đã chỉnh sửa của bạn.
Một hàm cũng có thể gọi hàm phụ được định nghĩa ở phía dưới. Khi đó, nó dùng phiên bản hàm phụ đang có tại thời điểm gọi, nên hàm phụ phải tồn tại trước khi bạn gọi hàm bên ngoài:
checkout(order) = order + delivery(order)delivery(order) = if order >= £40 then £0 else £3.50checkout(£25) cho kết quả £28.50checkout(£60) cho kết quả £60.00Điều kiện
Sử dụng if … then … else … để chọn giữa các kết quả. Thêm một if khác sau else cho nhiều hơn hai trường hợp:
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20postage(90 g) cho kết quả £0.85postage(500 g) cho kết quả £1.55postage(1.2 kg) cho kết quả £3.20Chỉ có nhánh áp dụng được thực hiện. Điều đó cho phép bạn đề phòng một phép tính mà nếu không sẽ thất bại, chẳng hạn như chia cho số không:
per_person(total, people) = if people > 0 then total / people else £0per_person(£90, 3) cho kết quả £30.00per_person(£90, 0) cho kết quả £0.00Đệ quy
Một hàm có thể tự gọi, miễn là một điều kiện cuối cùng dừng nó. Điều này đếm những cái bắt tay khi mọi người trong một nhóm bắt tay một lần:
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)handshakes(6) cho kết quả 15handshakes(10) cho kết quả 45Mỗi lời gọi hàm lồng sâu thêm một cấp; tối đa 12 lời gọi lồng nhau được cho phép. handshakes(12) vẫn hoạt động, nhưng handshakes(13) hiển thị Error: calculation limit. Hàm không bao giờ đạt điều kiện dừng vẫn được chấp nhận khi định nghĩa, rồi chạm cùng giới hạn khi gọi. Hai hàm cũng có thể gọi lẫn nhau trong giới hạn này.
Đối với việc đếm hàng ngày, các hàm tích hợp sẵn nhanh hơn và không có giới hạn như vậy. combination(10, 2) cũng cho ra 45, và factorial(n), hoặc n!, bao quát ví dụ đệ quy kinh điển.
Danh sách, ma trận và hơn thế nữa
Đối số có thể là danh sách, ma trận hoặc số phức; thân hàm có thể dùng bất kỳ hàm tích hợp nào:
spread(scores) = max(scores) - min(scores)spread([12, 18, 9, 21]) cho kết quả 12Thân hàm cũng có thể chứa phép tính tổng hoặc hàm giải phương trình với biến cục bộ riêng. Xem Danh sách và thống kê và Tổng, giải phương trình và giải tích.
Cạm bẫy
- Viết lũy thừa bằng
^.x²không được chấp nhận bên trong hàm. Tên tham số ngắn còn có thể trùng với đơn vị: trongw / h²,h²có nghĩa là giờ bình phương, không phải tham sốh. Hãy viếtw / h^2. - Kiểm tra số lượng tham số. Việc gọi
tip($48)khi hàm yêu cầu hai giá trị sẽ hiển thị lỗi. - Giá không kèm đơn vị được hiểu là đơn giá. Trong
oats(amount) = amount / 1 kg * £0.95, £0.95 được hiểu là giá cho mỗi kilôgam. Mỗi lời gọi hàm đều có chú giải: di chuột lên để biết £0.95 trong oats được coi là giá mỗi kg và có thể viết rõ thành £0.95/kg. Viết đầy đủ đơn giá trong định nghĩa sẽ xóa chú giải này. - Một dòng, một công thức. Định nghĩa là một biểu thức duy nhất trên một dòng. Đối với một phép tính có nhiều bước, hãy xác định một hàm nhỏ cho mỗi bước và kết hợp chúng lại.
- Việc định nghĩa lại bị hỏng sẽ giữ lại phiên bản cũ. Nếu một định nghĩa mới của
tipcó lỗi, dòng sẽ hiển thị lỗi vàtipđã hoạt động trước đó vẫn còn khả dụng. - Câu trả lời có thể thay đổi khi ghi chú tính toán lại. Các cuộc gọi được tính toán lại mỗi lần, vì vậy một hàm sử dụng
randomhoặc ngày hôm nay có thể đưa ra một câu trả lời mới. - Lỗi được truyền ra kết quả. Nếu một đối số làm công thức không tính được, chẳng hạn gây chia cho không, lời gọi hàm sẽ hiển thị lỗi đó.
Giới hạn
| Gì | Giới hạn |
|---|---|
| Số tham số mỗi hàm | 32 |
| Lời gọi lồng nhau (hàm gọi chính nó hoặc hàm khác) | 12 |
| Số lời gọi khi tính một lời gọi cấp ngoài cùng | 16,384 |
| Số hàm được định nghĩa trong ghi chú | 1,024 |
Đánh một giới hạn hiển thị Error: calculation limit. Phần còn lại của ghi chú tiếp tục hoạt động. Xem Lỗi, chẩn đoán và giới hạn cho mọi giới hạn.
Kết hợp các phần
Đây là hóa đơn cho công việc tự do. Đơn giá và VAT được đặt tên ở đầu, còn ba hàm nhỏ thực hiện tính toán:
# 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) cho kết quả £3,600.00build = fee(4.5) cho kết quả £2,025.00subtotal = design + build cho kết quả £5,625.00with_vat(subtotal) cho kết quả £6,750.00late_fee(with_vat(subtotal), 45) cho kết quả £135.00Thay đổi day_rate hoặc vat sẽ cập nhật mọi dòng bên dưới. Nếu khách hàng trả chậm, chỉ cần một lời gọi hàm để cộng phí.