質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

集合の表現

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,116

mightyMask

score 125

例えば、人間を分けるには様々な手法があり、男性と女性、歴代の総理大臣とそれ以外、等と分類することが出来ます。
また、四角形には長方形とひし形があり、両方の部分集合であるものは全て正方形です。

これらをうまく表現できるような構文を設計したいです。
オブジェクト指向プログラミング言語は、継承を使い集合論をうまく表すことが出来ますが、今ある言語に搭載されている機能だけでは、上のような集合を明示的に表すのは難しい言語ばかりです。私はそれらを実現できる言語を知りません。それらを実現できるような言語を設計したいです。

具体的には、以下のような事が明示できる物です。
1.人間は女性と男性の直和集合である。
2.外延記法(歴代の総理大臣を列挙)と内包記法(女性と男性を分ける)両方の記述が出来る。
3.長方形とひし形をともに多重継承できるのは正方形だけ。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+5

流行らなかった言語ですが、Ceylonという言語の直和型と合併型がお考えのものに近いと思います。
特に合併型という概念を持っているオブジェクト指向言語はありそうでなかなかありません。


(追記)
ちょっと表層的な回答をしてしまったのでもう少し突っ込んだ内容を。

オブジェクト指向について誤解なさっているところがありそうなので、そこをまず述べる必要があります。
オブジェクト指向プログラミングは、世界のモノを分類したりコードで表現したりするためのものではありません
オブジェクト指向プログラミングで実現したいことはただ一つ、「データ構造が自分自身の操作の仕方を知っている」ことです。

何かの情報を取り扱うためにデータ構造として表現した→構造の仕組みをよくわかっていない人が変な操作をして壊されてしまうのは安全でないし、どう扱ってよいのかわかりにくいのでは分業開発に向かない→データ構造自体がサービスメニューを公開して、そのサービスメニューだけにアクセスできるようにしよう!
これがオブジェクト指向プログラミングであり、サービスメニューとはすなわちメソッドです。

で、このストーリーにはクラスの継承なんかでてきません。継承は、オブジェクト指向プログラミングにとって本質ではないのです。まして、モノの分類をするための道具ではありませんというのがごく真面目な答えになります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

こんにちは。

全体集合があり、その内、特定の命題を満たすものが部分集合ですね。
命題は、条件を書いても良いし、要素を列挙しても良いです。
このようにして特定された部分集合に対して、和や交わり等の集合演算を行うことができます。
それらの演算は、命題をANDやOR等の論理演算子で結合したものと同義です。

このような話は命題論理と言う数学の範疇です。
「命題論理」をマスターしている人は的確に集合を明示でき、かつ、明示されたものを読み取れるだろうと思います。

そして、何らかの言語を開発することで、何らかの情報処理を比較的簡単にプログラミングできるようにすることは検討対象になると思います。
命題論理やそれを更に拡張した述語論理は情報工学の1分野です。もし、その分野で有用なプログラミング言語が想定されるのであれば、それらを研究している学者さんたちが、既に開発している可能性はあると思います。

ああ、思い出しました。Prologはそのような言語の1つです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/01 21:48 編集

    > このような話は命題論理と言う数学の範疇です。
    詳しくはないですが、論理学の世界ではこういうことになるのでしょうか。
    「Human → 男性 ∨ 女性」⇒「人間ならば、男性または女性である」
    パーサを作れば、機械的に集合を認識させる事も可能ですね。

    キャンセル

  • 2017/05/01 23:20

    もう30年前に習ったっきりですので、具体的な内容は忘れてしまってます。
    命題とか述語とかトートロジーとかの用語を理解するのに苦労した記憶が残ってます。再度超頑張ればもう一度理解できるとは思いますが、今更使わないですし。

    キャンセル

  • 2017/05/01 23:36

    私も論理学の初歩は習った覚えがあるのですが、忘れてしまいました。
    Wikipedia を探ってみましたが、https://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97%E5%AD%90 がまさしく「集合」を表していますね。
    https://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97
    話は変わりますが、正規表現の "|" (OR演算子)とか、Google Web検索の " " (AND 演算子)、"|" (OR 演算子)とか、文法は違えど応用されている技術はいくつかあるように思いました。

    キャンセル

  • 2017/05/01 23:48

    おお、Google Web検索で ORが使えるのですか!! 知らなかった。
    やってみました。でたらめなキーワードを2つ入れたので無関係なサイトが入り混じってなかなか不気味でした。

    キャンセル

-1

私は、オブジェクト指向はモデリングを行う方法だと考えています。

例えて言うなら現実のモノは無数にあり、分類がいくつもあります。分類出来るならまだマシで、例外と呼べるものが無数にあります。

例えば、性別にしてもそうで性的指向・自己認識・表現体・遺伝子・戸籍上の登録それぞれ一般化しづらいものがあります。それで、取り敢えず男性/女性/その他の性などざっくりと分けるのです。これをモデリングと呼びます。そして観て判るとおりこれが適切であるとは言い切れないのです。

もう一度書きますが、現実は無数にあります。オブジェクトという形で表現出来ないのです。オブジェクト指向として、それに近い物ものとして、ダックタイピングがあります。結構望む形で記述出来るのでは無いでしょうか?

これで現実を正確に処理しようとすると、例外だらけになってしまいます。というのも現在のコンピュータはアルゴリズムに従って処理をするという原理になっているので、すべての場合を記述する必要があるからです。

そのため、モデリングはそのシステムで何を必要としているかということを考えて最小限定義をするのが基本大事と考えています。

オブジェクト指向で現実を記述出来ると考える人が多いのは知っていますが、どうしてもその考え方はしっくり来ません。

そもそも我々が何かを分類する際には、余すところなく分類するのではなく経験の集合に名前をつけるということをしていると思います。そうして、集合と集合の間に見つけた例外の集合にまた名前をつけ分類する。そういった解決方法であれば、人口知能分野の方が適切だと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問