pasberth/Macra

!eq の仕様について

Closed this issue · 11 comments

  1. false の場合は nil 、 true の場合は 0 を返す
  2. 同値性のみ調べる。同一性はない。 "abc" と "abc" は常に 同じもので。
  3. 違う型の比較は常に false 。97 と 'a' は false
  4. リストは再帰的に調べる。 false がひとつでもあれば false
  5. クロージャは常に false 。たとえ同じ関数でも false (同一性がないのにまったく同じ事をする f と g が !eq f g は false だとして !eq f f が true なのはおかしい)

同一性を調べるものも必要。
eqは同一性eqvかequalが同値性がいいと思う。
eqでは!eq f fはtrue

同一性は調べられなくていい、というか、同一性は意識したくない。

必要だったら unique っていう同値の値が唯一しかない値を導入しよう。

リストに unique いれとけば同一性もうまく表現できる

それに 今の VM の実装は同一性なんてないから実装がかなり複雑になっちゃうよ

破壊的な変更ができないなら同一のものであるか調べられる意味はないと思う

破壊的変更と同一性は関係ない。

同一性が調べられないとクロージャを値としてまともに使えない。

え・・・?

クロージャとクロージャを比較したいときなんてそうそうなくない?

クロージャとクロージャを比較したいならクロージャだけ !eq での判定を同一性にすればいいと思う。

!eq と !equal のふたつ用意してリストとかの同一性まで判定できるようにはしなくていい。

クロージャを値として使うのに慣れればばよくあるよ。
マップのキーにしたりコールバック(CPS)として渡したときとか。

じゃあクロージャは同一性判定でOK.
クロージャの同値性を判定する方法があればそれでもいいけど多分むずいので。

ok. 名前は短い方がいいので !eq がいいとおもうけど

Scheme に合わせるなら !equal でもいいかも

どうせマクロ書くし

equalに一票

じゃあ equal で

この仕様で決定し、実装されてる