タグ

2012年9月26日のブックマーク (2件)

  • Haskell でリストの要素を swap する 9 つの方法

    0. Python でリストの要素を swap する方法 Python で「リストの特定のインデックス i, j の要素を swap したい」場合、以下のように書ける。 def swap(i, j, ary): tmp = ary[i] ary[i] = ary[j] ary[j] = tmp 要素を交換するために、一時的に値を退避させておく変数 tmp を利用し、要素を上書き。 多重代入を使うなら、一時変数を省略できる。 ary[i], ary[j] = ary[j], ary[i] こういった操作ができるのは、Python ではリストが「変更可能なシーケンス型」として定義されているため。 では、同様のことを変数の更新ができない Haskell ではどのように書けばよいのか? 1. データコンストラクタによる分解と take, drop 関数を使う 例えば、具体的に 0 ~ 7 を要素に

  • Haskell でデータコンストラクタを置き換える高階関数 - reduce について誤解していたこと

    0. 目次: 1. 型を処理する高階関数を考える視点 2. リストのデータコンストラクタを置き換える関数 a. reduceList 関数の定義 b. reduceList で要素を足し上げる c. reduceList で同じ値を返す d. reduceList から map 関数を導く e. reduceList から filter 関数 f. 述語を満たす要素に、特定の関数を適用する g. reduceList からリストを結合する関数 h. reduceList でリストを逆順にする関数 i. Haskell の標準ライブラリにある foldr 3-1. 二分木でデータコンストラクタを置き換える関数 (1) – 左右の子が必ずある場合 a. reduceBinaryTree 関数の定義 b. reduceBinaryTree 関数から、map, filter 関数を導く 3-2.