Tôi đang suy nghĩ về việc làm cho các chức năng currying và matrixdic có sẵn trong một ngôn ngữ lập trình chức năng được gõ động, nhưng tôi tự hỏi liệu nó có thể hay không.
Dưới đây là một số mã giả:
sum = if @args.empty then 0 else @args.head + sum @args.tail
được cho là để tổng hợp tất cả các đối số của nó. Sau đó, nếu sumchính nó được điều trị một số, thì kết quả là 0. ví dụ,
sum + 1
bằng 1, giả sử rằng +chỉ có thể làm việc trên các số. Tuy nhiên, thậm chí sum == 0là đúng, sumvẫn sẽ duy trì giá trị và thuộc tính chức năng của nó cho dù có bao nhiêu đối số được đưa ra (do đó "được áp dụng một phần" và "matrixdic" cùng một lúc), ví dụ, nếu tôi tuyên bố
g = sum 1 2 3
sau đó gbằng 6, tuy nhiên, chúng ta vẫn có thể áp dụng thêm g. Ví dụ, g 4 5 == 15là đúng. Trong trường hợp này, chúng ta không thể thay thế đối tượng gbằng một chữ 6, bởi vì mặc dù chúng mang lại cùng một giá trị khi được coi là một số nguyên, chúng chứa các mã khác nhau bên trong.
Nếu thiết kế này được sử dụng trong một ngôn ngữ lập trình thực sự, nó sẽ gây ra bất kỳ sự nhầm lẫn hoặc mơ hồ nào?
sumlà 0không có một cuộc tranh cãi và đệ quy gọi chính nó với một cuộc tranh cãi.
reduce?
args: empty, head, và tail. Đó là tất cả các chức năng của danh sách, cho thấy rằng có lẽ điều dễ dàng và đơn giản hơn sẽ làm là sử dụng một danh sách trong đó các công cụ biến đổi sẽ là. (Vì vậy, sum [1, 2, 3]thay vì sum 1 2 3)