ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

数学ソフトコミュの関数型言語HaskellによるDiagrams

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コメント(17)

そもそもHaskellはかじったことしかないのでこちらで勉強中
http://mixi.jp/view_bbs.pl?id=78108345&comm_id=1286347
数学プログラムを Haskell で書くべき 6 の理由
http://www.slideshare.net/konn/haskell-6-32258528
今月1.3がリリースされたのでわりとアクティブなイメージ
MLも活発。そのうちみたい
https://groups.google.com/forum/#!forum/diagrams-discuss
関数型言語でEscherのSquare limitを描く話
http://www.macs.hw.ac.uk/~dsg/events/ISS-AiPL-2014/materials/Gibbons/diagrams.pdf
http://users.ecs.soton.ac.uk/ph/funcgeo.pdf
http://users.ecs.soton.ac.uk/ph/papers/funcgeo2.pdf
複素数 (標準ライブラリ)
http://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Complex.html
半群(標準ライブラリ)
https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Monoid.html
メビウス群PGL(2,C) (半群をベースに実装)
http://projects.haskell.org/diagrams/gallery/Quasifuchsian.html
半順序集合
https://hackage.haskell.org/package/altfloat-0.3.1/docs/Data-Poset.html
http://mixi.jp/view_bbs.pl?id=66869549&comm_id=2110975#comment_id_1414716733

MathematicaやWolfram Alphaで±を式で入力できない?というはなし
たとえば
1 ± 1 + 3

Latexとかでは \pm をつかって記載する
{ 1 \pm 1 + 3 }

このまま書きたい。

Haskellならリスト内包表記で一発

[ 1 `pm` 1 + 3 | pm <- [\x y->x+y, \x y->x-y] ]

pm自体を配列で定義するとダメ

let pm = [x+y, x-y]
1 `pm` 1
これはよいが
1 `pm` 1 + 3
リストとIntで型があわないから

リスト内包表記なら明示的に結果がリストだと宣言している
こまかいところだが、もやっとしたものが晴れた気がした
pm'を一回定義しておけば書くのも楽

let pm' = [\x y->x+y, \x y->x-y]

[ 1 `pm` 1 + 3 | pm <- pm' ]
[ 2 `pm` 1 + 3 | pm <- pm' ]
[ 3 `pm` 1 + 3 | pm <- pm' ]
Haskellを数式を書くように使いたい
というのは
* 簡素に書きたい
* Texのように見た目もふくめてきれいに書きたい
という相反しそうなこともある

三重根を書くなら
x**(1/3)とすればいいが、

TeXなら
\sqrt[n]x

Mathematicaなら
CubicRoot[x]
なるべき新しいことは覚えたくない。。

Haskellなら
もともとあるsqrtを上書きしてn乗根も。。。
とおもったが可変長の関数をつくるのはできなくはないがおすすめでない(らしい)

もとのsqrtを壊してしまう形なら(結局あたらあしいことを覚える必要がでてくる羽目に)
引数を配列に定義できる。


let sqrt x = if length x == 1 then (x!!0)**(1/2) else if length x >1 then (x!!1)**(1/x!!0) else 1

sqrt [3,2]
1.2599210498948732
sqrt [2]
1.4142135623730951
Texの数学記号
http://en.wikibooks.org/wiki/LaTeX/Mathematics

TeX
\sum_{i=1}^{10} t_i

Haskell
let t k = k
sum [ t i | i <- [1..10]]
7の続き
±を複数いれると組み合わせが増える場合もある
±を同期させて増やしたくない場合もある

let pmo = [\x y->x+y, \x y->x-y]

[ 1 `pm` 1 + 3 `pm'` 4 | pm <- pmo, pm' <- pmo ]
[9,1,7,-1]

[ 1 `pm` 1 + 3 `pm` 4 | pm <- pmo ]
[9,-1]

>These are solutions to the problems listed on Project Euler.

https://wiki.haskell.org/Euler_problems


>Project Eulerは数学的な香りのする計算問題集です。問題を解かせるプログラムを作成することが意図されています。
>HaskellでProject Eulerの問題を解きながら、プログラミングに有効と思われる実践パターンを集めていきます

https://sites.google.com/site/nextliteracy/haskell/projecteuler
Haskellとは関係無いが

https://en.wikipedia.org/wiki/Iverson_bracket

Iversonのbracketという記法があり
条件文をsquare bracketで記述する
|x| = x [ x>=0 ] - x [x < 0]

haskellではsquare bracketはリストなので相性はわるそう

ビジュアルの開発環境 Mac用
http://haskellformac.com/
http://www.slideshare.net/KinebuchiTomo/haskell-63665717
圏とHaskellの型
Haskellではないですが
数式とPython式の対応関係をまとめてみた

https://qiita.com/wotsushi/items/fcd4b5edfab3d64e27f7?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=49e7c7fb1f-Qiita_newsletter_320_07_17_2018&utm_medium=email&utm_term=0_e44feaa081-49e7c7fb1f-32920041

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

数学ソフト 更新情報

数学ソフトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。