-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
乱数系関数の提案 #676
Comments
配列の組み込みプロパティにしたほうが書きやすそうな気も? |
あんまりプロパティに詰め込むと依存度も上がって良くないかなという考えです |
詳しく聞いてもいいですか? |
ニュアンスとしては乱数側に所属させてもっと抽象的にシーケンス的なものを対象にしたいという感じ |
ハードコードの組み込み以外で型を増やせる仕組みが欲しいところ… |
シーケンス的なもの=JSのiterableみたいなものですかね? |
他の言語でも |
あら、そうですか?python以外ではあまりイメージがないですが、事例があれば教えて下さい。
その点では、各シーケンス的なものの上位クラスで定義されたメソッドを下位でそのまま受け継いでも独自で拡張してもよいようにした方が柔軟性が高くなると思います。 |
調べた範囲では 配列からランダムに取り出す関数がどこに所属するか
|
シーケンスごとの実装に任せるということは乱択アルゴリズム自体を任せてしまうということなので、等価なシーケンスでも結果が変わってしまう可能性があります。 |
確かにそうみたいですね…
任せるのではなく変えてもよいとする余地を作るのが継承です。 |
変更できてしまうのが問題と思います。
結果を変えずに、乱択の段階で行う必要のある最適化が思いつきません。 |
実装されてないOOPに話が逸れましたが、 |
元になるシーケンスの仕組みが違うのに結果に一貫性を持たせる必要性は薄いように思います。
抽象化されたシーケンスには長さが無限になるものもあると思いますが、そのようなシーケンスは通常のアルゴリズムで乱択すると時間が無限にかかってしまいます。
むしろ基本的な対象こそ様々な機能を生やして便利にすべきでは?だからこそこれまで組み込みプロパティを増やす方向で進めてきていたものと思っていましたが
それは以前からやりたいと考えていましたが、要するに組み込みプロパティをユーザー側でも定義できるようにするということですから健全性の観点でいうと特にメリットはないのではと思います。 |
ArrayListかLinkedListかのような内部実装が結果に影響するのが良いとは思いません。気軽に変更できてほしいです。
有限か無限かは停止性にも関わってくるので最適化というより根本的なアルゴリズム自体が変わると思います。
個人的には1オブジェクトの責任は小さくあってほしい主義です。(プロジェクト自体の方針は把握してませんが……)
ただの関数をメソッド呼び出しのように書けるようにするものなのでプロパティに追加して所属させるのとは別物です(是非は別として)。 |
まあ色々ありますが、それら全てをひっくるめてもチェインの形で書けるメリットが上回ると思います。 |
確かにその点だけ見るとプラスマイナスでいえばマイナスでしょうが、マイナス幅は小さいと思います。
アルゴリズムが異なっていても、例えばchoiceなら「シーケンス状のものから乱数番目の要素を取得する」という共通部分を持った動作が同じ名前で呼び出せるというのは直感性・学習容易性において大きなアドバンテージになると考えられます。
着火した身でいうのもアレですが、本筋にあまり関わらなそうなのと長文しか出せない気がするのと論点を絞りたいのとでこの場では返答を割愛します。(また機会があれば・・・) |
Rand:choice(a: arr<value>, rand?: fn): value
配列からランダムに1個取り出す
Rand:choices(a: arr<value>, count: num, rand?: fn): arr<value>
配列からランダムにcount個取り出す(重複有)
Rand:sample(a: arr<value>, count: num, rand?: fn): arr<value>
配列からランダムにcount個取り出す(重複無)
Rand:shuffle(a: arr<value>, rand?: fn): null
配列をシャッフルする
The text was updated successfully, but these errors were encountered: