- 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)では、代数という「抽象的なモデル」を扱うという 点では同じだけど、代数には数学的な形式性が存在する、という決定的な違いがある
|