なぜlisp(私が知っているようにEmacs Lisp and Scheme)のような構文で(*)
が返されるのは1
ですか?空リストのemacs lispでの乗算
私はここに何を掛けますか?どのように私はこの関数を引数なしで*
と呼びますか?
なぜlisp(私が知っているようにEmacs Lisp and Scheme)のような構文で(*)
が返されるのは1
ですか?空リストのemacs lispでの乗算
私はここに何を掛けますか?どのように私はこの関数を引数なしで*
と呼びますか?
これは数学的な慣例です。product of an empty sequence of numbersは定義の1つです。 1つは乗算のための恒等要素であることに注意してください(1× = ×1 = )。これは、引数が存在しない場合を心配することなく、可変数の引数で*
を呼び出すことができるので便利です。
同様に、数字の空のシーケンスの合計はゼロです。これは、追加の恒等要素です。あなたのLispプロンプトで(+)
を発行してみてください。
これは数学から継承されたプロパティです。それはのようなものです。のように、任意の数の数値を加算することができます。数字を加算しないと、合計がゼロになるという特別なケースがあります。
同様に乗算では、任意の数の数を乗算すると、その製品が得られます。数字を使わないようにするには、1が基本値として使用されます(これは数年前に忘れてしまった数学的な名前です)。
これはプログラミング言語では実用的ですか?はい、任意の数の引数を持つ+
と*
のような関数を呼び出すことができるので、私は「はい」と答えるでしょう。例:
(apply '+ '(2 3 4)) => 9
(apply '+ '(2 3)) => 5
(apply '+ '(2)) => 2
(apply '+ '()) => 0
(apply '* '(2 3 4)) => 24
(apply '* '(2 3)) => 6
(apply '* '(2)) => 2
(apply '* '()) => 1
注:Schemeでは、実行する例については、演算子の前にある '' '(つまり' quote')を削除する必要があります。たとえば、 '(apply '+'())の代わりに'(apply + '()) 'を実行します。 –
'(*(+)*(*)(*)(*)(*)(*))(+ (*(+(*)(*)(*))(+(*)(*))) –
@EliBarzilay:isそれは獣のsexprですか? –
larsmans、明確な答えをありがとう。 – karasiov