トップページ > プログラム > 2014年07月25日 > ohjVzf57

書き込み順位&時間帯一覧

7 位/195 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000203016



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
978
Pythonのお勉強 Part49
関数型プログラミング言語Haskell Part25

書き込みレス一覧

Pythonのお勉強 Part49
575 :デフォルトの名無しさん[sage]:2014/07/25(金) 19:08:43.96 ID:ohjVzf57
>>575
まずは入力データ xs を宣言する
>>> xs = [{'code': 'a001', 'name': 'apple'}, {'code': 'a002', 'name': 'orange'}, {'code': 'a003', 'name': 'grape'}]


関数 dict とリスト内包表記を使う古い書き方:
>>> dict([(lambda record: (record['code'], record['name']))(x) for x in xs])
{'a003': 'grape', 'a002': 'orange', 'a001': 'apple'}


辞書内包表記を使う新しい書き方(Python 2.7以降):
>>> {x['code']: x['name'] for x in xs}
{'a003': 'grape', 'a002': 'orange', 'a001': 'apple'}
Pythonのお勉強 Part49
576 :デフォルトの名無しさん[sage]:2014/07/25(金) 19:12:12.95 ID:ohjVzf57
>>579の前半コードを訂正
>>> dict([(x['code'], x['name']) for x in xs])
{'a003': 'grape', 'a002': 'orange', 'a001': 'apple'}
関数型プログラミング言語Haskell Part25
978 :デフォルトの名無しさん[sage]:2014/07/25(金) 21:09:28.62 ID:ohjVzf57
なんだかオブジェクト指向の「クラスとインスタンス」と
Haskell の ad-hoc 型多相における「型クラスとインスタンス」とを
ごっちゃに理解している気がする
名前が似ているから、最初はしゃあないのかもしれんが....
関数型プログラミング言語Haskell Part25
979 :978[sage]:2014/07/25(金) 21:12:14.46 ID:ohjVzf57
アンカを忘れてたけど、>>978 は >>976 へのレスね
関数型プログラミング言語Haskell Part25
982 :デフォルトの名無しさん[sage]:2014/07/25(金) 21:31:20.15 ID:ohjVzf57
>>980
オブジェクト指向にしても関数型にしても、
対象領域を抽象的なモデルとして定義することが重要なのは同じ

その具体的な設計手法で基本になるのが、オブジェクト指向では
・各クラスの持つ属性と操作、および
・汎化/集約/合成といったクラス間における関連
の定義であるし、関数型(Haskell)では代数的データ型の定義(>>977)になる

インターフェイスやら型クラスやらは、これに付随するオマケみたいなもの
関数型プログラミング言語Haskell Part25
986 :デフォルトの名無しさん[sage]:2014/07/25(金) 23:55:14.90 ID:ohjVzf57
>>983
まず、>>982 で「代数的データ型」という言葉を使ったけど、
なぜ代数とか代数的と呼ばれているのか?について

数学では対象領域を方程式という「抽象的なモデル」として定義し、
実数という代数上で交換則や分配則といった法則(代数則)を駆使して解を導く
これと同様に、プログラミングでも対象領域をデータ型という「抽象的なモデル」で
定義し、ある代数上でモナドやファンクタなどの法則を駆使して
最終的なプログラムを導こうという発想が、Haskell プログラミングの根底にある
(そして、それを支える基盤が圏論(カテゴリ理論)になるけど、ここでは触れない)

ここで、数学の実数が形式的に(=厳密に)定義されているように、
プログラムのデータ型にも形式的に構成されていなければならない
代数的データ型は直積/直和とそれらの再帰だけから構成されるデータ型である
たとえば「リストとは data List = Nil | Cons a (List a) と定義される
モノイド(単位的半群)と呼ばれる代数である」と Haskell プログラマは認識する

オブジェクト指向のクラスやインターフェイスも「抽象的なモデル」であるが、
その定義は曖昧であり(=形式的ではなく)、人によってその定義も異なる
それに対して関数型(とりわけ Haskell)では、代数という「抽象的なモデル」を扱うという
点では同じだけど、代数には数学的な形式性が存在する、という決定的な違いがある


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。