Zastanawiam się nad udostępnieniem funkcji curry i variadic w funkcjonalnym języku programowania z dynamicznym pisaniem, ale zastanawiam się, czy jest to możliwe, czy nie.
Oto kilka pseudokodów:
sum = if @args.empty then 0 else @args.head + sum @args.tail
który rzekomo ma podsumować wszystkie argumenty. Następnie, jeśli sum
sama traktowana jest liczba, wynik jest następujący 0
. na przykład,
sum + 1
jest równe 1, przy założeniu, że +
może działać tylko na liczbach. Jednak nawet sum == 0
jest prawdą, sum
nadal zachowuje swoją wartość i właściwość funkcjonalną bez względu na liczbę podanych argumentów (stąd „częściowo zastosowane” i „variadyczne” w tym samym czasie), na przykład, jeśli zadeklaruję
g = sum 1 2 3
następnie g
jest równa 6
, jednak nadal możemy dodatkowo zastosować g
. Na przykład g 4 5 == 15
prawda. W tym przypadku nie możemy zastąpić obiektu g
literałem 6
, ponieważ chociaż dają taką samą wartość, gdy są traktowane jako liczby całkowite, zawierają w sobie różne kody.
Jeśli ten projekt zostanie użyty w prawdziwym języku programowania, czy spowoduje jakieś zamieszanie lub dwuznaczność?
sum
jest 0
bez argumentu i rekurencyjnie wywołuje się z argumentem.
reduce
?
args
: empty
, head
, i tail
. Są to wszystkie funkcje listy, co sugeruje, że być może łatwiejszą i prostszą rzeczą byłoby skorzystanie z listy zawierającej różne warianty. (Więc sum [1, 2, 3]
zamiast sum 1 2 3
)