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 sum
chí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 == 0
là đúng, sum
vẫ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 đó g
bằng 6
, tuy nhiên, chúng ta vẫn có thể áp dụng thêm g
. Ví dụ, g 4 5 == 15
là đúng. Trong trường hợp này, chúng ta không thể thay thế đối tượng g
bằ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?
sum
là 0
khô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
)