Bỏ qua nội dung
Hướng dẫn Varlig
Trang chủ Varlig

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ự:

calc
tip(bill, pct) = bill * pct
tip($48, 15%) cho kết quả $7.20
tip($120, 12.5%) cho kết quả $15.00
tip($36 + $12, 15%) cho kết quả $7.20

Dò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:

calc
bmi(weight, height) = weight / height^2
bmi(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:

calc
bmi(weight, height) = (weight / height^2) in kg/m^2
bmi(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:

calc
standard_vat() = 20%
£120 * standard_vat() cho kết quả £24.00

Mộ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_pay hoặc bmi2, không có khoảng trắng. Nếu bạn viết area 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ọi tip($48, 15%).
  • Mỗi tham số cần tên riêng của nó. f(a, a) = a là 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ặc sqrt(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, total và stdev. Nếu định nghĩa total(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, max và 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:

calc
tip(bill, pct) = bill * pct
tip($1,200, 15%) cho kết quả $180.00
tip($1200,15%) cho kết quả $180.00

Khi 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ó:

calc
vat = 20%
with_vat(price) = price * (1 + vat)
with_vat(£50) cho kết quả £60.00
vat = 5%
with_vat(£50) cho kết quả £52.50

Biế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ú:

calc
price = £10
double(price) = price * 2
double(£3) cho kết quả £6.00
price cho kết quả £10.00

Giố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:

calc
day_rate = £400
fee(days) = days * day_rate
invoice(days) = fee(days) * 1.2
invoice(5) cho kết quả £2,400.00

Mộ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ũ:

calc
shipping(order) = £4.95
total(order) = order + shipping(order)
shipping(order) = £2.95
total(£30) cho kết quả £34.95
shipping(£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:

calc
checkout(order) = order + delivery(order)
delivery(order) = if order >= £40 then £0 else £3.50
checkout(£25) cho kết quả £28.50
checkout(£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:

calc
postage(weight) = if weight <= 100 g then £0.85 else if weight <= 750 g then £1.55 else £3.20
postage(90 g) cho kết quả £0.85
postage(500 g) cho kết quả £1.55
postage(1.2 kg) cho kết quả £3.20

Chỉ 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:

calc
per_person(total, people) = if people > 0 then total / people else £0
per_person(£90, 3) cho kết quả £30.00
per_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:

calc
handshakes(people) = if people <= 1 then 0 else (people - 1) + handshakes(people - 1)
handshakes(6) cho kết quả 15
handshakes(10) cho kết quả 45

Mỗ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:

calc
spread(scores) = max(scores) - min(scores)
spread([12, 18, 9, 21]) cho kết quả 12

Thâ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ị: trong w / h², h² có nghĩa là giờ bình phương, không phải tham số h. Hãy viết w / 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 tip có 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 random hoặ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:

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) cho kết quả £3,600.00
build = fee(4.5) cho kết quả £2,025.00
subtotal = design + build cho kết quả £5,625.00
with_vat(subtotal) cho kết quả £6,750.00
late_fee(with_vat(subtotal), 45) cho kết quả £135.00

Thay đổ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í.