fuerte control de mutación *y* argumentos opcionales nombrados

Me encantan los lenguajes puramente funcionales como haskell y erlang, debido a su fuerte control sobre la mutación, pero hay aspectos prácticos que realmente no me gustan. Específicamente, creo que es ridículo que ninguno tenga soporte para argumentos opcionales con nombre para funciones como las que tiene Python. Los argumentos opcionales con nombre son ridículamente ridículamente útiles. Sinceramente, creo que son la razón número uno por la que a la gente le gusta tanto Python. Obviamente, son compatibles con la idea de un fuerte control de mutaciones, entonces, ¿existe un lenguaje con un fuerte control de mutaciones y argumentos opcionales con nombre?

Como respuesta preventiva a los tontos pedantes que dirán que haskell en realidad tiene soporte para argumentos opcionales con nombre, he visto lo que constituye tal cosa en haskell ( https://github.com/Gabriel439/Haskell-Optional-Args-Library /blob/master/src/Data/Optional.hs , https://stackoverflow.com/questions/7781096/is-there-a-better-way-to-have-opcional-arguments-in-haskell o http:/ /neilmitchell.blogspot.ca/2008/04/Optional-Parameters-in-Haskell.html por ejemplo) y es enormemente feo en comparación con Python. Ídem, erlang.

Entiendo que el enfoque estricto de haskell de una entrada, una salida para las funciones es probablemente incompatible con la idea de argumentos opcionales, tal como se implementa en python, pero creo que este enfoque de entrada y salida es mucho más un nerd matemático haciendo cosas porque -podemos algo así como una característica de lenguaje realmente útil. Continúe y pregúnteme por qué en otro lugar, pero el punto es que cualquier reemplazo que busque no tiene que (y probablemente no podría) funcionar bajo el mismo principio de una entrada, una salida y estoy completamente de acuerdo con eso.

Respuestas (1)

Una búsqueda rápida en la web reveló esta página en Rosetta Code con ejemplos de código en varios idiomas: https://rosettacode.org/wiki/Named_parameters

Preferiría haber dejado esto como un comentario, pero la falta de reputación dicta que se convierta en una respuesta. También podría elaborar:

Solo tengo experiencia de primera mano con algunos de estos, por lo que no puedo decir con certeza cuáles se ajustan a sus otros requisitos. Common Lisp y Racket son dos de esta lista que he probado y que considero algo amigables con un estilo de programación inmutable. Clojure también está allí, pero sin soporte "nativo" para parámetros con nombre (aunque hay un ejemplo de implementación en Scheme en la misma página, por lo que probablemente también podría implementarlo en Clojure, tiene cierres y macros) ).

También está F# , que no he probado pero que tiene parámetros con nombre y opcionales según la documentación . Tengo entendido que este es un lenguaje que tiene algunas similitudes filosóficas con Haskell.


Supongo que mi respuesta es F# , o uno de los muchos sabores de Lisp .