starke Mutationskontrolle *und* benannte optionale Argumente

Ich liebe rein funktionale Sprachen wie haskell und erlang wegen ihrer starken Kontrolle über Mutationen, aber es gibt praktische Aspekte an ihnen, die ich wirklich nicht mag. Insbesondere finde ich es lächerlich, dass keiner benannte optionale Argumente für Funktionen wie Python unterstützt. Benannte optionale Argumente sind lächerlich lächerlich nützlich. Ich denke ehrlich, dass sie der Hauptgrund dafür sind, dass Leute Python so sehr mögen. Sie sind offensichtlich mit der Idee einer starken Mutationskontrolle kompatibel, gibt es also eine Sprache mit starker Mutationskontrolle und benannten optionalen Argumenten?

Als vorbeugende Antwort auf die pedantischen Schwachköpfe, die sagen werden, dass Haskell tatsächlich benannte optionale Argumente unterstützt, habe ich gesehen, was so etwas in Haskell ausmacht ( 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-optional-arguments-in-haskell oder http:/ /neilmitchell.blogspot.ca/2008/04/optional-parameters-in-haskell.html zum Beispiel) und es ist im Vergleich zu Python massiv ungenau. Dito, erlang.

Ich verstehe, dass Haskells strenger One-Input-One-Output-Ansatz für Funktionen wahrscheinlich nicht mit der Idee optionaler Argumente kompatibel ist, wie sie in Python implementiert sind, aber ich denke, dass dieser One-In-One-Out-Ansatz viel mehr ein nerdiges mathematisches Tun-Dinge-weil ist -wir-können so etwas wie ein tatsächlich nützliches Sprachfeature. Gehen Sie voran und fragen Sie mich, warum woanders, aber der Punkt ist, welcher Ersatz ich auch immer suche, muss nicht (und könnte wahrscheinlich nicht) nach dem gleichen Ein-Eingabe-Ein-Ausgabe-Prinzip arbeiten, und ich bin damit völlig einverstanden.

Antworten (1)

Eine schnelle Websuche ergab diese Seite bei Rosetta Code mit Codebeispielen in mehreren Sprachen: https://rosettacode.org/wiki/Named_parameters

Ich hätte dies lieber als Kommentar hinterlassen, aber aufgrund mangelnder Reputation wird es stattdessen zu einer Antwort. Ich könnte auch genauer ausführen:

Ich habe nur wenige davon aus erster Hand erfahren, daher kann ich nicht sicher sagen, welche Ihren anderen Anforderungen entsprechen. Common Lisp und Racket sind zwei aus dieser Liste, die ich selbst ausprobiert habe und die ich als etwas freundlich zu einem unveränderlichen Programmierstil betrachte. Clojure ist auch da, aber ohne "native" Unterstützung für benannte Parameter (obwohl es auf derselben Seite ein Beispiel für die Implementierung in Scheme gibt, so dass Sie es wahrscheinlich auch in Clojure implementieren könnten, hat es Schließungen und Makros ).

Es gibt auch F# , das ich nicht ausprobiert habe, das aber laut Dokumentation sowohl benannte als auch optionale Parameter hat . Mein Verständnis ist, dass dies eine Sprache ist, die einige philosophische Ähnlichkeiten mit Haskell hat.


Ich schätze, meine Antwort ist F# oder eine von vielen Lisp- Varianten.