2

Scheme * では、引数の積を返します。引数なしで呼び出された場合は 1 を返すか、引数が 1 つある場合は引数を返します。

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

これのセマンティクスは何ですか?どのように値を返すことができますか? 乗算を実行するために、引数 1 を暗黙的に追加しているようです。これはどこで説明されていますか?

この疑問は、次のことに出くわしたときに頭に浮かびました。

(call-with-values * -) => -1

明らかに、これは 1 が乗算の恒等式であるためですが、これがどこにも言及されているのはよくわかりません。簡単に言えば、引数のない積が 1 になるのはなぜですか?

4

1 に答える 1

3

+これは、との両方の便利なプロパティです。どちらも*、引数なしで呼び出されると、それぞれの操作の ID を返します。(+)単純にエラーをスローする代わりに return が返されるという事実は、空のリストに対して work を0使用してリストを合計する一般的なイディオムになるため、おそらくより明らかに有用です。(apply + list-of-numbers)同様に、 を使用*してリスト内のすべての数値の積を取ることもできますが、これはおそらくあまり役​​に立ちません。

それでも、 to の類推は、少なくとものゼロ引数動作が理にかなっ+ていると主張するのに十分強いと思います。スローしても多くのバグが防げるとは思いませんし、便利なコードを書くのが難しくなるかもしれません。ID を返すようにすることで、言語の「滑らかさ」が向上する (内部的に一貫性が高まる) という事実が、Scheme がクリーンで原理主義的な言語に感じられる理由の 1 つだと思います。*

于 2016-04-09T02:52:48.383 に答える