2016-04-09 8 views
2

In Schema * gibt das Produkt seiner Argumente zurück. Wenn ohne Argumente genannt es 1 zurückgibt, oder mit einem Argument gibt es das Argument:Multiplikationsoperator

(*) => 1 
(* 2) => 2 

Was die Semantik hierfür sind? Wie kann es irgendeinen Wert zurückgeben? Es scheint implizit ein Argument von 1 hinzuzufügen, um die Multiplikation durchzuführen. Wo wird das erklärt?

Diese Frage stellt sich in meinem Kopf, wenn sie über die folgenden kommen:

Offensichtlich ist dies, weil 1 ist die Identität für die Multiplikation, aber ich kann nicht ganz sehen dies überall bezeichnet. Kurz gesagt, warum ist das Produkt keine Argumente 1?

+0

Verschleierung, natürlich. : P – cat

+0

Beachten Sie, dass 'und' und' oder' genauso funktionieren, wenn sie ohne Argumente aufgerufen werden: '(und)' '' '' '' '' '' '' '' '' '' ' Wie Alexis 'Antwort sagt, macht es die Sprache intern konsistenter und reduziert die Ecken, mit denen der Code umgehen muss. –

Antwort

3

Dies ist eine nützliche Eigenschaft von + und *: Sie beide geben die Identität für ihre jeweiligen Operationen, wenn sie ohne Argumente aufgerufen werden. Die Tatsache, dass (+)0 zurückgibt, anstatt einfach einen Fehler zu werfen, ist wahrscheinlich offensichtlich nützlicher, da es das übliche Idiom der Summierung einer Liste unter Verwendung (apply + list-of-numbers) Arbeit für die leere Liste macht. Ähnlich könnten Sie * verwenden, um das Produkt aller Zahlen in einer Liste zu nehmen, aber das ist vielleicht weniger offensichtlich nützlich.

Trotzdem denke ich, das analog zu + stark genug ist, zu argumentieren, dass das Null-Argument Verhalten von * mindestens macht Sinn. Ich denke nicht, dass es viele Bugs verhindern würde, wenn man es zum Werfen bringt, und es könnte dazu führen, dass einige nützliche Codes schwerer zu schreiben sind. Ich denke, dass die Tatsache, dass es die Identität zurückbringt, die "Sanftheit" der Sprache verbessert (sie ist intern konsistenter), ist einer der Gründe, warum sich Scheme wie eine so saubere und prinzipientreue Sprache anfühlt.