Viết một hàm, f
lấy một số nguyên dương và trả về một hàm.
Hàm mới được trả về phải giống hệt f
. Tuy nhiên, khi "cuộc gọi chấm dứt" xảy ra, f
thay vào đó sẽ trả về tổng của tất cả các số nguyên được thông qua.
Ví dụ: g=f(4)
(nếu f
là chức năng đầu tiên) nên đặt thành g
chức năng khác. h=g(3)
sẽ làm như vậy Tuy nhiên, khi bạn gọi h
mà không có đối số (xem bên dưới để biết chi tiết), nó sẽ xuất 7, vì đó là tổng của các đối số hàm trước đó. Đặt một cách khác , f(3)(4)() == 7
.
Hãy lưu ý điều này không giống như f(3,4)()
.
"Cuộc gọi chấm dứt" là một trong các tùy chọn sau (lựa chọn của bạn):
- gọi đối số w / o
- null làm đối số
- bất kỳ giá trị không tích cực
Số lượng tùy ý của các cuộc gọi chức năng nên được hỗ trợ, không có giới hạn được xác định trước.
Nó được đảm bảo rằng tổng số tiền sẽ không lớn hơn 1000.
Chúng tôi có thể giả định rằng có ít nhất một cuộc gọi được thực hiện trước khi "cuộc gọi chấm dứt".
Mã của bạn không nên sử dụng các biến tĩnh, theo chương trình, do đó có thể chạy thử nghiệm nhiều lần trong cùng một thời gian chạy và quan sát chính xác cùng một hành vi.
Ví dụ:
f(1)() == 1
f(4)(2)(7)() == 13
f(4)(2)(7)(5)(2)() == 20
q = f(2)(3); b = f(1)(2)(3); q(); b()
?
f(4)
trả về một chức năng mới. Nếu hàm mới đó được gọi mà không có đối số, nó sẽ trả về4
, nhưng nếu nó được gọi với một đối số khác thì nó sẽ lại trả về một hàm mới có cùng ngữ nghĩa nhưng với đối số mới được thêm vào4
, v.v.