集合論に基づいた言語を作りたいat TECH
集合論に基づいた言語を作りたい - 暇つぶし2ch117:デフォルトの名無しさん
14/08/17 10:36:45.62 ruDVRpF3.net
Ocamlは副作用があって純粋な関数型でない。副作用ありでいいならJavascriptも関数型言語でJavascriptで関数型の勉強可能。



純粋関数型プログラミングとは
関数が純粋であるというのは、副作用がないということである。副作用とは、関数が、内部で、なんらかの状態を隠しもつことをいう。
OCamlのようなML由来の言語は"ほぼ純粋"である。副作用を、参照や配列の形で使えるけども、大抵は、書いたコードは純粋関数型に落ち着くことが多い。
Haskellもまた、関数型言語で、純粋関数型だ。OCamlは、より実用的といえる。純粋でない関数もときには便利だからだ。
URLリンク(ocaml.org)


JavaScriptで学ぶ関数型プログラミング
URLリンク(hamasyou.com)

JavaScript はプロトタイプベースのオブジェクト指向言語ですが、関数型言語の機能も備えています。
URLリンク(www.geocities.jp)


JavaScript - Javascrptで関数型プログラミングの入門 - Qiita
URLリンク(qiita.com)

JavaScriptは関数型言語の特徴を取り入れていると思いますが、純粋な関数型言語ではありません。しかし今、そしてこれからのトレンドは関数型言語と言われています。
そこでJavaScriptでより関数型言語的なプログラミングを可能にするfn.jsを使ってみましょう。
URLリンク(www.moongift.jp)

CoffeeScript と Node.js による関数型の JavaScript
URLリンク(www.ibm.com)

Functional JavaScript
URLリンク(gist.github.com)

118:デフォルトの名無しさん
14/08/17 10:45:48.55 ruDVRpF3.net
この記事では、クイックソート・アルゴリズムの実装について、 様々な言語で書かれた関数型プログラミングのコードを紹介しています
なお、この記事の内容は、 2ちゃんねる掲示板 のプログラム板にあるスレッド 【PHP,Python】スクリプト, バトルロワイヤル36【Perl,Ruby】 で行われた議論を整理、加筆したものです。

関数型言語が関数型プログラミングを何の苦もなく実践できるのは、当たり前の話です。
Haskell
quicksort [] = []
quicksort (pivot:xs) = quicksort littles ++ pivot:(quicksort bigs)
where
f x (ls, bs) = if x < pivot then (x:ls, bs) else (ls, x:bs)
(littles, bigs) = foldr f ([], []) xs


この節で取り上げる Ruby, JavaScript, Python はどれも関数型言語には分類されていませんが、関数型の特性を取り入れていると言われています。
それでは、これら言語の関数型プログラミング・スタイルを見ていくことにしましょう。

JavaScript
function quicksort(xs) {
function f(xs) {
var pivot = xs[0];
function g(pair, x) {
var ls = pair[0], bs = pair[1]
return x < pivot ? [ls.concat([x]), bs] : [ls, bs.concat([x])];
}
var pair = xs.slice(1).reduce(g, [[], []]);
var littles = pair[0], bigs = pair[1];
return [].concat(
quicksort(littles), [pivot], quicksort(bigs)
); }
return xs.length <= 1 ? xs : f(xs); }

URLリンク(www.h6.dion.ne.jp)

119:デフォルトの名無しさん
14/08/17 10:51:34.94 ruDVRpF3.net
こっちのクイックソートのほうが短くわかりやすかった。


クイックソート - NullPointer's Blog

Erlangで書くと…
quicksort([]) -> [];
quicksort([Head|Tail]) ->
quicksort([X || X <- Tail, X < Head ]) ++ [Head] ++ quicksort([X || X <- Tail, X >= Head]).


小さいのを左に集めて、大きいのを右に集めて、繰り返し…、アルゴリズムの説明そのままのコードになる。
簡単すぎ。アルゴリズムを理解するという目的であれば、関数型のコードの方が10000倍理解しやすい。
関数型っぽい書き方は、最近のJavaScriptならばサクッと書けますが…

function quickSort(array) {
if (array.length <= 1) return array;
var pivot = array.pop();
var lt = array.filter(function(a){ return a < pivot });
var ge = array.filter(function(a){ return a >= pivot });
return quickSort(lt).concat([pivot]).concat(quickSort(ge))
}

URLリンク(paulownia.hatenablog.com)

120:1
14/08/17 15:08:45.66 wbAX39n3.net
本屋めぐってきたけどOcamlの本なかったわー
廃れてしまった言語なん?
しかたないからwebで情報探すか。

121:デフォルトの名無しさん
14/08/17 15:31:49.05 8WbwPRMF.net
ググれば数秒でみつかるのに。
URLリンク(caml.inria.fr)

122:デフォルトの名無しさん
14/08/17 16:03:30.63 PGXi6tC2.net
>>109
> うーん。そうなんですか。でもそれだとこのスレが終わってしまうw
いいことじゃん。
続きはブログでやってくれ。

123:1
14/08/25 19:07:11.02 DrxGPTGS.net
とりあえず、Ocamlでconnect4のルールだけ作ってみた。
だれか添削たのむ。
URLリンク(www.age2.tv)

connect4はこことかで遊べます。
URLリンク(www.connectfour.org)

124:デフォルトの名無しさん
14/08/25 19:28:01.77 vcy2nNqb.net
以下>>1がOCamlを勉強するスレ

125:1
14/08/25 19:30:28.60 DrxGPTGS.net
いやw今はそうだけど、そのうち本題に戻りたいとは思ってる。

126:デフォルトの名無しさん
14/08/25 20:06:42.36 l0tzbBCe.net
この思考エンジンで。GUIはすでにあるから思考部だけ。



URLリンク(www.vector.co.jp)

石を7つ直線に並べた方が勝ちという五目並べに、囲碁の石を取るという概念を加えた新しいゲーム「囲連星」。CPU戦も対人戦も楽しめる。

ルールは簡単!
1) 黒白交互に打っていき、先に縦・横・斜めに7つ石を並べたほうが勝ち
2) その間に相手の石を囲んで取ることが出来る

127:1
14/08/25 20:15:54.91 DrxGPTGS.net
ばかやろーw
囲連星つったら今までまともなAI作れたの2人しかいない難題じゃねーかw
もっと簡単な奴にしろw

128:デフォルトの名無しさん
14/08/26 17:44:18.47 Yj5Hd+B/.net
総当たりができなければモンテカルロでやりゃ良いじゃん
もっと素晴らしいのを見つけて欲しいな

129:1
14/08/26 19:40:10.91 FDxVWnbU.net
モンテカルロなら簡単だとおもってるな?
そんな甘くないから。
今のLV3のプログラムは相当レベル高いから。

130:デフォルトの名無しさん
14/08/26 20:14:52.44 k5rL1v3w.net
>>1程度の習熟度だとそうかもな

131:1
14/08/26 20:22:34.58 FDxVWnbU.net
>>130がLV3に勝ち越す囲連星AI作ったら納得してやる。

132:デフォルトの名無しさん
14/08/26 20:44:26.53 k5rL1v3w.net
>>1「これ知らなーい、あれも知らなーい」ばかりで、
挙句の果てには「数学のテクニックをプログラミングに持ち込めるかなと思った」だもんなあ。どんだけ無知なんだよ。

OCamlに興味を示したと思ったら、
>>1「connect4のルールだけ作ってみた。添削頼む()」とか、更にすっとぼけたこと言ってるし。

せめてスレタイに沿うような問題設定ができるまで学習しろ。
適切に問題設定ができないのに、コードをこねくり回したって意味ない。そりゃ只の自慰行為だ。

133:デフォルトの名無しさん
14/08/26 20:54:37.89 FDxVWnbU.net
>>132
俺が無知なのは認めるが、おまえが威張るのはLV3を超えるAIを作ってからだ。
そうでなきゃお前も口だけだぞ。

134:デフォルトの名無しさん
14/08/26 21:07:11.73 k5rL1v3w.net
別に威張ってないよ?
>>1の習熟度だと難しく感じるだろう、と言っただけ。

自尊心が傷ついたのかな。幼子みたいな奴だ。
次からは優しく諭すように指摘してあげるよ。

ところで、>>1のやりたいことって何だ?スレタイとは違うのか?

135:1
14/08/26 21:15:57.51 FDxVWnbU.net
まあ、一応スレタイの通りだな。
スレの方向はずれてきているが。
とりあえず、関数型言語を触ってみてるところだ。

136:デフォルトの名無しさん
14/08/26 21:47:40.66 UhLj/9Xy.net
LV3は大して強くない。手動でほぼ100%勝てる。
たぶんプログラムでも勝てると思う。
これは囲碁と違って有効手が見付けやすくモンテカルロ法は向いていないと思う。

137:デフォルトの名無しさん
14/08/26 22:01:43.24 2ww4+7z5.net
ダメダメだな。いつまでたっても何もできそうにない

138:1
14/08/26 22:10:51.94 FDxVWnbU.net
>>136
手動なら俺だって勝てるわ。
ほぼ100%とはいかないけど。
プログラムで勝ち越すことに意義がある。
LV3に勝ち越して人間相手にも自然な手を返せるプログラムが作れるってならぜひ作ってほしいね。
一囲連星ファンとして。

>>137
その可能性は非常に高いw

139:デフォルトの名無しさん
14/08/26 22:21:22.44 2ww4+7z5.net
ふーん。ならスレ終了でOKだな

140:1
14/08/27 18:26:42.61 VCMYq2O7.net
>>139
まあ、そうあせらずに。
どうせ過疎板だ。
ノンビリ行こう。

141:デフォルトの名無しさん
14/08/27 19:44:52.25 FS966Rgy.net
はあ?これ以上妄言を垂れ流すならブログでやれば?

142:デフォルトの名無しさん
14/08/27 21:12:10.16 sWLZW0su.net
1のスレだし見たくないやつが来なければ済む

143:1
14/08/28 19:02:16.77 NyU3eawL.net
しかしOcamlはプログラム組みにくいな。
ちょっとしたことやるにも再帰関数つかうっぽいし。
慣れてないだけかもしれんが。

144:デフォルトの名無しさん
14/08/28 19:15:00.80 Qmt6TOBF.net
慣れてないだけ。

145:デフォルトの名無しさん
14/08/28 19:38:25.81 RkFVOWz2.net
>>143
スレリンク(tech板:413-418番)

146:1
14/08/28 20:42:22.39 NyU3eawL.net
>>145
俺がこんなこと言っちゃいかんのかもしれんが、
確かに参照透過性とか数学的にはいいのかもしれんが、
実用性では怪しく感じる。

147:デフォルトの名無しさん
14/08/28 22:22:22.57 wWKXD6ik.net
純粋関数型でない、参照透過性がないのは、手続き+αの手続き型言語。

148:デフォルトの名無しさん
14/08/28 22:43:29.27 wWKXD6ik.net
2032 年の FPGA: 20年後の FPGA の未来像
Tabula 社社長兼 CTO の Steve Teig 氏は、次のように断言しました。
「FPGA のプログラミングに関して言えば、RTL は適していません。しかし、C はさらに問題があります。
直列実行から並列実行への移行でさえも低レベルすぎます。
Haskell のような関数型言語の方がましですが、ほとんどの関数型言語がベースとしている数学的抽象化であるラムダ計算も最適な抽象化とは思えません」
Blainey 氏も同じ意見のようで、ソフトウェアを FPGA 構造に変換するライブラリおよびコンパイラを備えた明示的並行言語が広く普及するとともに、
特定の種類の問題を扱う関数型言語プログラマのエリートが現れることになると予想しました。
URLリンク(www.altera.co.jp)




現状でさえマルチスレッドプログラミングは開発の困難さが指摘されている分野である。
Sweeney氏は、これは現在主流の開発言語であるC++の手続き型言語としての特性に由来すると指摘する。
Sweeney氏は、この問題を解決するためには、ゲーム開発言語として純粋関数型の言語が必要になるだろうと言う。
この種の処理系では、C++のような共有メモリのアクセスや、I/O操作は基本的に行なえない。
その引き替えとして、各関数のアトミック性が構造的に保証されており、安全に並列実行できるのだ。
しかも、コンパイラが対応さえすれば、関数を自動的に多数のコアに分散処理させることができるというスケーラブルな実行バイナリを作り出せる。
Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
URLリンク(game.watch.impress.co.jp)

149:1
14/08/28 23:08:29.08 NyU3eawL.net
>>148
CPUコアが1万個くらいあるならこういうパラダイムシフトも起きるのかもしれんが。
20年後どの程度ハード進歩してんのかね。

150:デフォルトの名無しさん
14/08/29 00:59:50.98 4AjKkLEL.net
>>149
コア数、5760基



2014年7月22日掲載
ビデオカード単体の価格を下回る破格のロープライスで発売中! 安い、安すぎる! NVIDIA史上最速「GeForce GTX TITAN Z」搭載ゲーミングPCが299,799円!?

「GeForce GTX TITAN Z」は、1枚のカードに「GK110」コアを2基搭載する、NVIDIAの最上位デュアルGPU。
12GBのGDDR5メモリーを搭載するほか、CUDAコアは計5760基で、演算性能は8TFLOPSをうたうウルトラハイエンドGPUです。
デルによると、このGPUを搭載する「ALIENWARE Aurora TITAN Z」は、3840×2160の4K環境で60fpsを超えるパフォーマンスを叩き出し、
「グラフィックス設定を最大にして4Kを有効にすることで、2014年6月に発売され全世界で記録的なセールスを更新中のオープンワールド型アクションゲーム『ウォッチドッグス』も、
すべてのエレメントがさらにシャープで滑らかで鮮明になり、開発元であるUbisoft Montrealの意図通りのディテールをすべて体験することができる」とのことです。

URLリンク(magazine.kakaku.com)

151:デフォルトの名無しさん
14/08/29 14:03:44.10 /HNlnXLI.net
>>146
停止性問題さえ知らないのか。
参照透明性はプログラムを解析しやすくする。
C/C++ で const の少ないソースを見たら気を付けろ。
実用でいえば、コンパイラが最適化するときに全ての中間式に仮の名前を付けて const 変数として扱い、
例えばループの外に追い出すためのスコープ中で不変な部分を探すために使ったりするが、
これは参照透明な範囲を見つけるためだと言えるだろう。
手続型でプログラムをしていても、なるべく参照透明を保った方がいいし、参照透明な範囲を意識しておいた方がいい。

152:1
14/08/29 19:54:56.85 5NUrtg1w.net
>>150
GPGPUはまだ実用って感じじゃないなぁ。
限られた問題しか上手く解けないイメージがある。

>>151
俺もC++書くときはconstつけられる場所はなるべくconstつけるようにしてるけど、
constつけられるメンバ関数って単純な処理やってる場合が多いつーか
やっぱクラスの肝となるメンバ関数にはconstつけられない場合が多いつーか。
std::vectorだと単純なsize()なんかはconstつけられるけど肝となるpush_back()にはつけられないみたいな。

153:デフォルトの名無しさん
14/08/29 20:31:28.66 6XulYCBt.net
>>148
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
スレリンク(tech板:670-680番)

154:デフォルトの名無しさん
14/08/31 04:44:55.96 igojaLD4.net
>>148
こいつら夢と理想を語ってる時点で1の妄言と大差ないわ。

155:デフォルトの名無しさん
14/08/31 04:46:10.77 igojaLD4.net
夢と理想を描くくらいなら一昔前の俺のレベル。

156:1
14/09/03 19:05:09.17 pp7cuLBa.net
結局、関数型言語って何がいいのかいまいちわからんな。
もうちょっと修行が必要か。。。

157:デフォルトの名無しさん
14/09/03 19:21:58.87 0ir9kNKt.net
関数型の良さは手続き型でなく、計算順序(手続き)がなく、副作用がないところ。
(実際は計算時間が掛かるけれど)入力に対し瞬時に応答が返るというイメージ。

158:1
14/09/03 20:06:29.19 pp7cuLBa.net
副作用がないってのが今一信用できないんだよなぁ
デカいオブジェクトの一部を更新しようとしたら丸コピーするんでしょ?
まあ、ハードが進歩したらどうなるかわからんが、
副作用なしで十分速いコードを書くのは難しくない?

159:デフォルトの名無しさん
14/09/03 20:49:03.08 z1Y/3x7f.net
>>158
>デカいオブジェクトの一部を更新しようとしたら丸コピーするんでしょ?

そんな馬鹿はしない
更新した項目(名前と更新値のペア)が新しい環境へ追加されるだけ
それ以外の項目は古い環境をさかのぼって検索すれば参照できる
(一般には検索結果はメモ化されるから、2回目以降の検索は遅くならない)

ただし副作用のない世界におけるデータ構造に関する
効率的な実装アルゴリズムは発展途上にある
(世の中の歴史的なアルゴリズムの大半は副作用を前提にしているからね)
たとえばこんなのが分かりやすいと思う
・20分でわかる Purely Functional Data Structures - Kmonos.net
 URLリンク(www.kmonos.net)

160:デフォルトの名無しさん
14/09/03 20:52:47.28 gtOXQwRF.net
>>158
そこは CopyOnWrite とかの実装でなんとかなるでしょ
て言うか、一部を更新と言うのがそもそも違うような気がするが

161:1
14/09/03 21:07:05.78 pp7cuLBa.net
>>159
これ考えたやつすげーな。
素直に感心するわ。

162:デフォルトの名無しさん
14/09/04 12:51:46.22 Azi8pMDh.net
クリス・オカサキさんはsimonpjとかに並ぶ神レベルの御方のひとり。

163:デフォルトの名無しさん
14/09/05 06:58:20.44 vJ702ivD.net
>>157
ハア?ナニイッテンノ?
関数型にも計算順序はあるぞ。評価戦略という名前で。

164:デフォルトの名無しさん
14/09/05 09:55:29.84 qmuQRxyX.net
正確には、結果が得られるとしたら計算順序によらない(チャーチ=ロッサ性)だな。

165:1
14/09/05 19:53:29.10 Y4VtbNiL.net
ちなみに>>159が言ってるデカいオブジェクトの一部を更新するとき
丸コピーしないレベルの最適化を実現してるコンパイラって現段階であるの?
あるんなら触ってみたい。Ocamlでなくていいから。

166:デフォルトの名無しさん
14/09/05 20:18:53.62 qmuQRxyX.net
リンク先のPDFをよく読んだか?

コンパイラがやってくれるという話じゃなくて、そういうようにデータ構造を設計する、
という話だから(ある程度はHaskellコンパイラの最適化のおかげも入ってるけど)。

167:1
14/09/05 20:50:15.22 Y4VtbNiL.net
自力で実装するのか。
参照透過性を保つのはしんどそうだな。

168:デフォルトの名無しさん
14/09/05 21:21:29.17 Ne6tWzRJ.net
関数型言語を、参照透過性がないC言語で実装可能だし、
C言語ソースコードにコンバートすることも可能。
実行時の中身の動作は関係がない。

169:1
14/09/05 21:38:10.90 Y4VtbNiL.net
>>168
よくわからんが論理的にそういうこともできるって話ならあんまりありがたみがないなあ。
実装がどれだけ楽かってのは俺にとって重要な話だ。
やっぱりそこはコンパイラに頑張ってほしいね。

170:デフォルトの名無しさん
14/09/05 21:46:10.50 Ne6tWzRJ.net
参照透過性はハードウェアの物理的な制約でない。
現状、普及しているパソコンもノイマン型、手続き型でアセンブラ・機械語で動作している。
ハードウェアまでが完全に関数型として動くわけでない。

171:1
14/09/05 22:11:28.48 Y4VtbNiL.net
物理的な制約ではないったって、参照透過性をノイマン型コンピュータで
効率よく実装できないんならそれは物理的な制約みたいなもんでしょ。
丸コピーに勝る最適化が実装されないと、信用できないなぁ。

172:デフォルトの名無しさん
14/09/05 22:11:40.10 u2C0iLEX.net
>>169
>>1 には初耳かもしれないけど、リストというデータ構造がある
リストの実装方法はいくつかあるけど、
世の中で関数型を名乗る言語のコンパイラのほぼすべてにおける
リストに対する構成(cons)と分解(decons)といった操作は、
大昔から「丸コピーしないレベルの最適化」が実現されている
もちろん OCaml でもリスト操作で丸コピーは発生しない

す ご い だ ろ ?

173:デフォルトの名無しさん
14/09/05 22:27:04.06 vJ702ivD.net
>>172
へー、consセルのcarに破壊代入するかわりに
cdrをコピーせずに新しいcarだけを追加するのかい?

そりゃすごいねえ

174:デフォルトの名無しさん
14/09/05 23:09:43.43 rtobVFDF.net
>>173
リストの丸コピーの定義書いてみ
まあ、まともな精神なら恥ずかしくて書けないだろうけどな w

175:デフォルトの名無しさん
14/09/06 09:24:36.23 2eQ4pr9G.net
>>174
consセルの丸コピーの定義書いてみ
自分の馬鹿さが明らかになって恥ずかしすぎて書けないだろうけどなw

176:デフォルトの名無しさん
14/09/06 09:26:57.68 2eQ4pr9G.net
つーかconsセルに破壊代入する関数型言語なんて腐る程あるし
この馬鹿は何を自慢したいのだろう?馬鹿すぎて理解できない

177:デフォルトの名無しさん
14/09/06 09:48:13.12 VC7+V5v8.net
>>175
書けないわけね
まあ、そりゃそうだわな w

178:デフォルトの名無しさん
14/09/06 19:13:42.33 2eQ4pr9G.net
おー、華麗な勝利宣言だwww




キモ!

179:デフォルトの名無しさん
14/09/06 21:11:07.40 VC7+V5v8.net
>>178
キモとしか書けなくて悔しいね w

180:デフォルトの名無しさん
14/09/07 08:03:05.89 EoKvJO+q.net
ハスケラって初心者のくせにハスケル知ってるというだけでエラソーしてるけど
あれって宗教か何かなのか?

181:1
14/09/07 23:47:31.57 9dp9vcbI.net
関数型言語やりたいならOcamlよりHaskellお勧め?
>>123のコードは副作用ありまくりなんだが。

182:デフォルトの名無しさん
14/09/08 07:21:00.89 j836SLcH.net
>>180
ガキにありがちな行動だろ
スルーしとけよ

183:デフォルトの名無しさん
14/09/08 11:55:44.86 cPc63HcT.net
関数型言語の中では副作用がある言語のほうが主流だろ。
LISPやSchemeやSMLやOCamlなど。

184:デフォルトの名無しさん
14/09/08 12:03:45.51 kaEhSBtj.net
副作用、代入ありは、関数型記述もできる手続き型。

185:デフォルトの名無しさん
14/09/08 12:08:09.21 uHpNxeFr.net
純血主義ならhaskellで

186:デフォルトの名無しさん
14/09/08 15:22:32.10 pVr2+nKJ.net
関数型言語は使うなと何処かの先生が言ってたぞ。
関数型と言うのは単にプログラミング手法であるから言語なんてつけるなと言うことらしい

187:デフォルトの名無しさん
14/09/08 17:26:33.52 uHpNxeFr.net
>>186
kwsk

188:デフォルトの名無しさん
14/09/08 18:04:23.92 pVr2+nKJ.net
>>187
関数型プログラミングは本当に難しいのか
URLリンク(itpro.nikkeibp.co.jp)
『関数型言語』を使ってはいけない」との発言が飛び出したのだ。

189:デフォルトの名無しさん
14/09/08 18:23:47.23 kaEhSBtj.net
純粋関数型はプログラマの技法のためでなく
コンパイラ、ハードウェアのためだろ。
プログラマにとっては使いにくいが、
手続き、順序がないことで、機械が並列処理しやすい。
順序があると、先の手続きが終わるまで待たないといけない。

190:デフォルトの名無しさん
14/09/08 19:14:00.85 cPc63HcT.net
>>189
逆。
純粋関数型言語はプログラマのための技術だ。
関数型言語の並列化は何十年も昔からの研究テーマだが
未だに実用的な決定打が出ていない。

191:デフォルトの名無しさん
14/09/08 19:20:10.71 kaEhSBtj.net
プログラマのためなら、手続き型も使える関数型、関数型もも使える手続き型というハイブリットのほうがよく
厳しい制約をつけることはない。値の書き換え不可能は便利でない。

192:1
14/09/08 19:36:06.54 ZbTP8aJt.net
いつの間にか関数型言語スレになってしまったな。
まあ寄り道もいいか。

193:1
14/09/08 20:53:29.01 ZbTP8aJt.net
無知をさらすようだけど、チューリングマシンで一回テープに書き込んだらそのメモリは書き換えられないマシンがあったら、それはチューリング完全になる?

194:デフォルトの名無しさん
14/09/08 21:12:35.82 0BEKcfFo.net
直感的には、規則は面倒になりそうだけど「テープはいくらでもある」というのが
チューリングマシンの前提だから、問題ないんじゃない?

195:1
14/09/08 21:17:06.30 ZbTP8aJt.net
直感的にはそうなんだけど、じゃあ一回しかメモリに書き込めないマシンでチューリングマシンをシミュレートしてみろって言われると俺には無理。

196:デフォルトの名無しさん
14/09/08 21:53:22.17 YW1sNfFx.net
>>186
そういう先生は先生として失格なので無視していい

197:デフォルトの名無しさん
14/09/08 23:28:07.41 0BEKcfFo.net
てゆーか、文脈を無視して取り出すな危険、系だろ

198:デフォルトの名無しさん
14/09/08 23:46:25.48 nnXcaq6b.net
>>180
ナゼ突然に Haskell という名前を出すのか意味不明だなぁ
不変オブジェクトによる計算は、ML や Lisp のように破壊的代入が可能な
不純関数型言語でも重要な概念であり、基本のプログラミング・スタイルだよ
特に>>159のプレゼン内で紹介されているオカサキ氏の書籍では、
すべてのコードが Standard ML で書かれているのに、いったい何を言いたいのだろう?

おそらく>>180の頭の中には「関数型言語 == Haskell」という等式が
あるんだと思うけど、>>180のようにあらゆる関数型言語がHaskellに見えてしまう
ニワカな自称Haskellプログラマを指して「ハスケラ」と呼ぶんだがね

199:デフォルトの名無しさん
14/09/08 23:54:48.92 nnXcaq6b.net
>>186,188
ソースが 日経ITpro だろ
ここは以前(2006年)にも「本物のプログラマはHaskellを使う」という煽り記事を書いて、
記事に踊らされた糞ハスケラを量産した張本人だよ
そして今度(2014年)は「『関数型言語』を使ってはいけない」とは、
その変わり身の速さに大笑いするね

>>186,188が、またITに無知なマスゴミ記事に踊らされたいのかい?
日経新聞の中国賞賛記事に煽られて進出した日本企業のように....

200:デフォルトの名無しさん
14/09/09 05:57:09.86 ukX/qMIS.net
単に172みたいなシッタカはハスケラが多いという経験則なんじゃね?
実際、シッタカ多いだろ、ハスケラ界隈。

201:デフォルトの名無しさん
14/09/09 06:01:06.48 ukX/qMIS.net
つーか、158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている。
それをいちいち関数型特有の技術であるかのように言いふらすのか。
ルビ厨と同類だなw

202:デフォルトの名無しさん
14/09/09 10:33:24.25 iSgMgqSE.net
> 実際、シッタカ多いだろ、ハスケラ界隈。

うん。カタカナで書く奴とか、>>199 のように、長期連載記事を全くそれと認識できてない
ほどのニワカだということを自分で自慢して自爆しちゃう奴とか。

203:デフォルトの名無しさん
14/09/09 14:38:16.53 ukX/qMIS.net
>>199と、「本物のプログラマは…」が長期連載記事であることは全く矛盾しないけど、
どうして>>202は199は長期連載と認識していないと思い込んじゃったのかな?
エスパーですか?

204:デフォルトの名無しさん
14/09/09 23:09:21.92 u4pMEKRn.net
>>201
ほう、「>>158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている」のか、それは知らなんだ

関数型を名乗る言語の大半では(=少なくとも自分の知る限りすべての関数型言語では)、
始祖 Lisp の時代から本質的に永続性を持つリストと呼ばれるデータ構造を基本としている
だから関数型言語では、普通に(=暗黙のうちに)永続データ構造が使われていると言える(>>172)

一方、手続き型言語で基本的なデータ構造といえばレコード(=構造体)と配列だと思うけど、
>>201の住んでいる異次元世界では、レコードや配列が永続データ構造で実装されているんだね
興味深い話だから、ぜひ kwsk 説明してもらえると嬉しいなあ....(棒

205:デフォルトの名無しさん
14/09/09 23:32:43.42 iSgMgqSE.net
見事に知ったかが消えたな

206:デフォルトの名無しさん
14/09/10 07:01:46.89 nz1QrfPP.net
>>204
知らないって、幸せなことなんだなあw
ある言語で永続データ構造が使えるからといって、
その言語の全てのデータ型が永続データ構造で実現されていることにはならないことぐらい
中学生レベルの論理を知っていればわかりそうなものなんだけどなあw

copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて
そこにはLISPで培われた永続データ構造の技術が使われてるよ。

207:デフォルトの名無しさん
14/09/10 11:12:44.60 2lSvEqyn.net
どんどん言ってることがズレてくな

208:デフォルトの名無しさん
14/09/10 11:51:44.84 2N2PVK/b.net
関数ムラの住民は世間が狭いね

209:デフォルトの名無しさん
14/09/10 22:45:00.45 MIzNsnl2.net
>>204
> copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて

ほう、これまた面白い話が聞けた
>>206がいる異次元世界だと、その「copy on write的なデータ構造」を使う
ライブラリが手続き型言語プログラマの間では「ふつうに(>>201)」使われているんだ

関数型言語で「ふつうに」リスト操作している(>>172)のと同様に
手続き型でも永続データ構造が使われているとは、
>>206のいる異次元世界はプログラマにとって理想郷だね!!(棒

210:桃白白 ◆9Jro6YFwm650
14/09/10 22:56:17.03 6zdXUVOl.net
>>209
Stringとか

211:デフォルトの名無しさん
14/09/10 23:05:15.07 MIzNsnl2.net
>>210
String は単純型だからデータ構造やライブラリには含まれない
もし String を含めるのなら Integer もデータ構造の一種になってしまう

212:桃白白 ◆9Jro6YFwm650
14/09/10 23:08:58.07 6zdXUVOl.net
>>211
単純型ってなんすか?
BigIntとか

213:デフォルトの名無しさん
14/09/10 23:20:47.47 MIzNsnl2.net
>>212
単純型とは、他の型から構成されることのないデータ型であり、
文字列型の他には、論理型、文字型、列挙型、数値型がある
関数型言語の Lisp や論理型言語の Prolog だとアトムとも呼ばれる

214:桃白白 ◆9Jro6YFwm650
14/09/10 23:22:03.29 6zdXUVOl.net
>>213
他の型から構成されることがないってどういう意味っすか?

215:デフォルトの名無しさん
14/09/10 23:32:19.53 MIzNsnl2.net
>>214
たとえばレコード型(C言語であれば構造体)は、
単純型、配列型、別のレコード型といった「他の(複数の)型から構成」される
また配列型も整数型、文字型、レコード型といった「他の型(の反復)から構成」される
そしてレコード型や配列型は、要素となった他の型に分解できる

それに対して、単純型は「他の型から構成されることがない」
言い換えると、単純型は(他の型へ)分解できない根源的なデータ型になる
>>213で書いたアトムも、物理学の(分解できない)原子が語源になっている

216:デフォルトの名無しさん
14/09/10 23:45:56.12 ADC46RWM.net
単純型‥もう、アーキュムレータとかその他レジスタに載る型、ということにしては?

217:デフォルトの名無しさん
14/09/11 06:06:05.80 /5wQig/e.net
>>211
Stringが内部データ構造を持っていたりライブラリで提供されている言語や処理系なんて山ほどあるだろ。
StringがCharのリストとして実現されている言語や処理系も多い。
関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw

218:デフォルトの名無しさん
14/09/11 10:27:37.46 ZRdF18oF.net
>>217
関数型でもCharのリストで扱う言語あった気が

219:デフォルトの名無しさん
14/09/11 12:11:59.58 /5wQig/e.net
むしろStringが単純型なのはLISP系ぐらいでは

220:デフォルトの名無しさん
14/09/11 12:59:06.68 ThP8Tlio.net
>>216 型理論(型システム)的には全く無意味だからそれ

221:デフォルトの名無しさん
14/09/11 12:59:52.98 ThP8Tlio.net
> 関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw

自分がバカっぷりをさらしてることはわからないんだねw

222:デフォルトの名無しさん
14/09/11 13:06:24.74 ThP8Tlio.net
ていうか、関数型ムラに居て、HaskellのStringが[Char]だと知らない奴がいるもんかw

あと、流石に効率が悪いことも多いってんで、最近はText型とその周辺の実装が進められてる。

223:デフォルトの名無しさん
14/09/11 13:39:24.40 /5wQig/e.net
ハァ?誰もHaskellの話なんてしていないぞ。

そんなにHaskellの話がしたければHaskellスレに行けば?
「Stringは単純型だと言ったらいじめられた~」とか言えば
みんな同情してくれるだろw

224:デフォルトの名無しさん
14/09/11 14:10:25.16 AMEA56Qh.net
桃白白はVBScriptしか知らないからあの答えで合ってるの。

225:デフォルトの名無しさん
14/09/11 17:15:48.36 ThP8Tlio.net
> みんな同情してくれるだろw

おれは苛めてるんだ、と、自分を騙すのに必死なのかw

226:デフォルトの名無しさん
14/09/11 17:18:44.69 Eq/MhJWf.net
Stringが単純型しかないLisp以外の言語まだー?

227:デフォルトの名無しさん
14/09/11 19:02:59.76 ZRdF18oF.net
Stringがプリミティブな言語自体は存在するけど(手続き型ならBASICとかPerlとか)
>>211 はStringは単純型、と言い切っちゃってるからな

228:デフォルトの名無しさん
14/09/11 20:03:48.12 Eq/MhJWf.net
しかもBASICやPerlにしても文字列を内部実装として永続データ構造で保持してる処理系とか普通にあり得るし。例えばPerlのHaskell実装とか。

229:デフォルトの名無しさん
14/09/12 00:22:55.80 ke/j7I6c.net
で?

230:デフォルトの名無しさん
14/09/12 02:10:37.29 KXHcVpz6.net
元々なんの話だったんだっけか、よく分からんくなってきた

231:デフォルトの名無しさん
14/09/12 03:48:40.55 5DSOPRX8.net
結論
ハスケル村民は中二病

232:デフォルトの名無しさん
14/09/12 19:25:03.94 i5Uyd5M3.net
>>230
>>186参照
関数型言語の関数型というのはただの手法であって言語という程のことではないらしい
haskellは何言語と呼べばいいんだろう

233:デフォルトの名無しさん
14/09/12 19:43:34.87 ke/j7I6c.net
文脈のある文章を文脈から取り出してセンセーショナルに騒ぐ奴はバカ、でFA

234:デフォルトの名無しさん
14/09/12 19:54:30.05 i5Uyd5M3.net
関数志向宣言型プログラミング言語って呼べばいいのかな

235:デフォルトの名無しさん
14/09/12 19:55:16.20 i5Uyd5M3.net
誤字った
関数指向宣言型プログラミング言語

236:デフォルトの名無しさん
14/09/12 20:06:23.28 Iy5dUXcN.net
略して関数型言語

237:1
14/09/13 11:02:47.39 NSrcGDnS.net
connect4をみんな大好きhaskellに移植したぞ。
こんどこそ添削たのむな。

URLリンク(www.age2.tv)

238:1
14/09/13 19:54:59.71 NSrcGDnS.net
>>237のコードは一手打つたびに盤面を丸コピーしてると思うんだが
そこらへんコンパイラが上手いことやってくれてるの?

239:デフォルトの名無しさん
14/09/14 00:53:22.93 N78ccrO0.net
囲連星で

240:デフォルトの名無しさん
14/09/14 07:25:06.11 3VDbXkPO.net
>>237
letのかわりにwhereで、
ifのかわりにパターンマッチで書き換えれば
Haskellっぽくなる。

241:1
14/09/14 10:08:34.40 rj6ubMt8.net
>>239
そんなに囲連星AIがほしけりゃ自分で作れよ。なんで人にやらせようとするんだよ。

>>240
添削ありがとうございます。
whereは変数を定義する前に参照してるみたいで気持ち悪いです。
まあ、慣れの問題なんでしょうが。

242:デフォルトの名無しさん
14/09/14 15:18:34.44 sID153LP.net
最初のほうだけ読んだけど、
言語知らなすぎだろ。

それで言語作ろうなんて、10年早いわ。

もっとも、実用性なんてどうでもいい。
言語作ってみたいとか、作ることで、プログラミングというものを知りたいってのなら、
まったくもって問題無く、むしろ頑張れって感じだけど。

243:1
14/09/14 15:57:37.44 rj6ubMt8.net
>>239
ちなみに囲連星AIは昔作ったことある。
もっといえばゲ制作板の囲連星AIスレの380は俺だ。
ちなみに9路囲連星のGUIを作ったのも俺。
囲連星は一回やってもう挫折してるんだよ。

>>240
とりあえず、パターンマッチにしてみました。
letはそのまんま。だってwhereきもいんだもん。

URLリンク(www.age2.tv)

>>242

まあな。俺の実力じゃ実用的な言語を作るのは無理だろうな。
でもそれはほとんどのプログラマがそうだろ。
実用的な言語つくれるプログラマなんて一握りだろ。
もっといえば実用的な言語って一人で作れるようなものじゃないだろ。

244:デフォルトの名無しさん
14/09/14 16:15:43.91 w3keaoOy.net
囲連星ってそんなに難しいか?
やってみるか。

245:デフォルトの名無しさん
14/09/14 16:39:35.29 sID153LP.net
>>243
自分がそうだからって、
「ほとんど」とか、他の人を巻き添えに足引っ張るな。

自分の未熟さを棚に上げる愚かな行為だ。

RubyのMazsとか、言語オタクだぞ。

そうじゃなきゃ作れないってことだ。

246:1
14/09/14 17:59:15.91 rj6ubMt8.net
>>244

がんばれ、応援するよ。LV3越えは俺の悲願でもあるから。
だれかほかの人でも達成してくれたらうれしい。
できあがったらゲ制作の囲連星AIスレで報告してくれ。

>>245

そこでMatzみたいなスーパースター引き合いに出してどうすんだよ?
Matsは一握りかほとんどかで言ったら明らかに一握りだろ。
そのMatzにしたってRubyコミュニティの支えなしじゃここまでやれなかっただろ。
だいたいGoとかD言語みたいなスーパースターたちが作った言語だって
はたして「実用」と呼べるほどのユーザーを獲得してるかどうか。
言語をつくるって大変なことだと思うよ。
まあ、自分の未熟さを棚にあげてるのはそうかもしれんが。

247:1
14/09/14 18:14:29.35 rj6ubMt8.net
あら、MatzがMatsになってた。
誤字すまん。

248:デフォルトの名無しさん
14/09/14 18:30:48.41 s+BV7Cb9.net
新言語かぁ‥誰しも夢見るね‥haskell が圏論というのであれば、今後新言語を作るとすれば何を足がかりにすればいいのか?

249:デフォルトの名無しさん
14/09/14 19:26:12.34 r0J72yK/.net
Haskell自体は圏論ベースじゃないぞ。
モナドだけ。

250:デフォルトの名無しさん
14/09/14 19:33:25.07 s+BV7Cb9.net
そうなのか‥懐かしい名前、大熊正先生の著書をヤフオクでえらい高い値段でgetしてしまった(無論、読めやしない‥専門書って大変だね‥)が、無意味だったようだね

251:デフォルトの名無しさん
14/09/14 20:19:23.00 NJi0vj84.net
集合論に基づく言語は、SIMDやメニーコアが発展していくうちに普通になると思うけど、
今は、C++をシンプルにした感じのスクリプト言語が欲しい。
まだ、集合論に基づく言語が手続き型を超える性能を出せる環境になってないから。

252:1
14/09/14 20:55:06.50 rj6ubMt8.net
結局、ハードの作りが根本から変わらん限り
C/C++を超える言語は現れないんじゃないかな。
超えるっていってもどういう意味で超えるのか微妙だけど。

253:デフォルトの名無しさん
14/09/14 21:30:29.03 s+BV7Cb9.net
C の言語仕様にキャリーフラグを含めてほしかった‥ちょっと今苦戦中

254:1
14/09/14 22:27:09.05 rj6ubMt8.net
C言語の言語仕様だけでキャリーフラグって実現できるんだっけ?
できるんだろうけど、ぱっと思いつかないな。

255:デフォルトの名無しさん
14/09/14 22:52:20.28 r0J72yK/.net
これ参考になるかも
URLリンク(d.hatena.ne.jp)

256:1
14/09/14 22:53:39.24 rj6ubMt8.net
最悪、すべての演算結果をテーブル化しておけば実現できるなw
効率的にはどうやるんだろう?

257:1
14/09/14 22:54:40.97 rj6ubMt8.net
おおっとリロードしてなかった。

258:デフォルトの名無しさん
14/09/15 00:55:12.74 MGTym664.net
ts

259:240
14/09/15 06:10:27.36 8SU9zqnx.net
>>243
たとえば、
let c = map digitToInt ( filter isDigit s)

let c = map digitToInt . filter isDigit $ "123"
にできる。
さらに、
s_to_line :: String -> [Int]
s_to_line = map digitToInt . filter isDigit
と関数を定義しておいて、
let c = s_to_line s
とすると、ググッとHaskellっぽくなる。

260:1
14/09/15 10:47:17.06 bIq53OoI.net
>>259
これが関数の合成ってやつか。
すごく…気持ち悪いです。
なれれば快感になりそうだが。

261:1
14/09/15 11:16:32.32 bIq53OoI.net
しかしOcamlよりhaskellのほうが書いててたのしいな。
なんでだろう?

262:デフォルトの名無しさん
14/09/15 15:28:20.49 kzUO2epp.net
写真には写らない美しさがあるから

263:デフォルトの名無しさん
14/09/15 16:34:50.30 kAk3iSbn.net
リンダリンダ~♪

264:1
14/09/15 16:46:42.27 bIq53OoI.net
だれか>>243のコードのplayの関数を、一手打つごとに盤面を丸コピーしないで済むように改善してください。
よろしくお願いします。

265:1
14/09/15 20:32:54.71 bIq53OoI.net
>>259
修正しました。仮引数ないと違和感ありますね。
URLリンク(www.age2.tv)

266:240
14/09/16 09:53:54.34 Qs6Ucf5H.net
>>264
URLリンク(hackage.haskell.org)

267:1
14/09/16 19:15:18.40 bFn0xUvd.net
>>266
MatrixのsetElemは丸コピーじゃないの?
丸コピーじゃないなら参照透過性はどうなるの?

268:デフォルトの名無しさん
14/09/16 19:28:35.09 i9frET+F.net
参照透過性は、プログラマが気にすることではない。
コンパイラ、言語が気にすること。
純粋関数型言語は、参照透過性に違反できないのが原則。
純粋関数型でコンパイルが通れば参照透過性がある。

269:1
14/09/16 19:43:03.56 bFn0xUvd.net
>>268
それじゃ丸コピー?

270:1
14/09/16 20:03:52.99 bFn0xUvd.net
setElemの計算量オーダーが書いてないな。
ほかのは書いてあるのもあるのに。

271:デフォルトの名無しさん
14/09/16 20:35:47.52 +Ut5bl5+.net
>>269
純粋関数型言語における配列の実装は、
一般的には B-Tree またはその亜種を用いるのが一般的
で、常識的には更新する要素とは無関係な部分ツリー(への参照)を
そのまま(更新後の)新しい配列に引き継ぐから、丸コピーにはならない
(Data.Matrixのソースを確認した訳じゃないんで、あくまで一般論であることに注意)
また、配列を利用するアプリケーション側でも、必要な複数の更新操作を関数合成で
まとめてから適用するのが一般的だから、更新のオーバヘッドもさほど気にならない

更に言えば、>>243のように(ライブラリを用いず)自前でリストを配列に見立てて
配列操作を実装するのは自由な選択だけど、メモリ効率を考慮しなければならないケースであれば、
(>>243のように)配列更新のたびにリストを丸コピーするのは、お馬鹿さんと言うしかない
リストの一要素だけを更新する時、更新した要素の tail リストは更新後のリストと共有できるはずだ

最後に、こういったパズル/ボードゲーム系の全解探索問題を記述する場合、何も考えず
ゲームの局面ごとに盤面全体を丸々コピーするコードを書いてしまうのは、純粋/非純粋な関数型に限らず
手続き型プログラミングであったとしても初心者レベルのコード設計力だと見なすしかない
通常、チェスや将棋のように膨大な空間を探索しなければならないゲームのプログラミングでは、
プレイの「一手(いって)」に関する情報だけを局面として記憶し、差分として管理する

272:1
14/09/16 20:55:03.92 bFn0xUvd.net
ふーむ。
たしかにツリーをつかえば丸コピーは避けられるかもしれないな。
勉強になりました。

273:1
14/09/16 21:47:36.14 bFn0xUvd.net
Data.Matrixがないって言われる…
なぜ?

$ ghc connect4_4.hs

connect4_4.hs:3:8:
Could not find module ‘Data.Matrix’
Perhaps you meant
Data.Ratio (from base)
Data.Ratio (needs flag -package haskell2010-1.1.2.0)
Use -v to see a list of the files searched for.

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3

274:240
14/09/16 22:18:12.61 Qs6Ucf5H.net
>>273
cabal install matrix

275:1
14/09/16 22:31:31.46 bFn0xUvd.net
>>274
ありがとうございます。コンパイルできました。
でも[[Int]]をMatrixに置き換えたらバグが発生。
ただいまデバッグ中です。

276:デフォルトの名無しさん
14/09/16 22:50:04.77 fJmUlCeF.net
>>253
アセンブラ以外で言語仕様にキャリーフラグが関与する演算子があるのは TL/1 しか見たことない

277:1
14/09/16 23:22:16.78 bFn0xUvd.net
Matrix版できたっぽいのであげます。

URLリンク(www.age2.tv)

Matrixのindexは1から始まるそうなのでそれに合わせて外部仕様も変更しました。
いままでは列の指定が0~6だったのが1~7になります。
今思えば外部仕様まで変えることはなかったような気もしますが後の祭り。

278:デフォルトの名無しさん
14/09/16 23:34:02.05 i9frET+F.net
よく知られてるゲーム、GUIのあるゲームで頼む。
麻雀、OTHELLO、将棋、囲連星はwindowsGUIはある。

279:1
14/09/16 23:38:22.55 bFn0xUvd.net
習作だから実用性はあんまり求めてないんだよなぁ。
connect4は小さい割に動いてるもの作ってる気になれるから気に入ってる。

280:240
14/09/17 06:12:56.94 Rq9rJBGz.net
>>277
結構よいのでは。
しつこいけど、whereは1度使ってみたらいいんじゃないかなあ。
letで頭から読む/書くという感覚もわかるけど、
whereを使うと、1つの関数定義全体を宣言的に読む/書く感覚がわかると思う。

281:デフォルトの名無しさん
14/09/17 12:19:24.89 pJCF9C7A.net
>>268
>参照透過性は、プログラマが気にすることではない。(略)
>純粋関数型でコンパイルが通れば参照透過性がある。

コンパイル通るかどうか気にする必要あるじゃんかw

282:デフォルトの名無しさん
14/09/17 13:02:50.04 Rq9rJBGz.net
>>268
> 純粋関数型でコンパイルが通れば参照透過性がある。

え?純粋関数型で型検査によって参照透明性を確保しているのはHaskellぐらいでは。

Haskell以外の、例えばMirandaやClean等の他の純粋関数型言語では、
型システムに依存せずに言語機能を制約して参照透明性を確保している
という理解なんだが。

283:デフォルトの名無しさん
14/09/17 13:40:46.72 Fq6HYI62.net
参照透過性は型とは関係ないだろ?
型があってもなくても破壊的代入があったらアウト。

284:デフォルトの名無しさん
14/09/17 13:41:37.54 pJCF9C7A.net
ちょっと本題から外れるが。

たしかに本格的に型システムと一体化させたのはHaskellからだけど、
Mirandaから参照透過性に対して型システムは使い始めてる。
MirandaでKAOSってOSを記述した時のinteract型が、
Miranda本体にも取り入れられてる。
この時に導入されたcomp, returnがmonadタイプの定式化の元になった。
E. Moggiが"Notions of computations and monads"で定式化して。
Haskellを設計、開発することになったのは、
この辺を本格的にやろうと思うとオープンソースじゃないとやりにくいから。

285:デフォルトの名無しさん
14/09/17 14:19:32.02 Rq9rJBGz.net
>>284
確かにMirandaの評価戦略でのIO絡みの例外的扱いは、
HaskellのIOモナドの原型っぽい感じだな。

286:1
14/09/17 19:25:16.95 zOPUPbSB.net
>>280
where使ってみました。
ただ、gameの中のletはどうやってwhereにすればいいかよくわからなかったのでletのままです。

URLリンク(www.age2.tv)

287:240
14/09/18 17:39:55.46 gCmSXIgb.net
>>286
doの中のletは仕方ない。そういうもの。
もう普通にHaskell入門レベルはクリアしてると思う。
不要な括弧が結構あるけど、それは単に慣れの問題だから構わないと思う。
おつかれさん。

288:1
14/09/18 19:52:18.04 WHOt2iCh.net
>>287
ありがとうございます。

haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
CPUのコアがもっと増えてコンパイラの最適化が今より強力になったらどうかわからんが、
C/C++より効率的なコーディングをするのは難しそう。

かといって生産性が劇的にあがるかというとそんな感触もなかった。
RubyにはC/C++より生産性高いと思わせるなにかがあったが
haskellとRubyを比べた時、はたしてhaskellのほうが生産性高いかといわれると?
もうちょっとデカいアプリを組んでみる必要があるのかもしれんが。

とりあえず、haskellでコーディングされた実用的で有名なアプリがあれば教えてほしいです。

289:デフォルトの名無しさん
14/09/18 19:55:50.99 7eeU4PcQ.net
Monadius
1985年5月29日、そのゲームは、全国のゲーマーに衝撃を与えた。
らしい。
僕はよく知らない。そのときまだ生まれたばかりだったからだ。
20周年をむかえたグラディウスと、 ゲームを、ゲームプログラミングを愛する人たちに感謝を込めて贈る。
URLリンク(www.geocities.jp)

290:1
14/09/18 20:11:37.12 WHOt2iCh.net
>>289
これはすごいかも。

291:1
14/09/19 19:22:36.10 KT7u8M0C.net
>そういうデータの一塊であるMonadiusが、 updateMonadius, renderMonadius, isMonadiusOverという演算に関してGameを成す、と宣言されています。
これが圏論ってやつ?

292:デフォルトの名無しさん
14/09/19 19:58:12.78 vmyXN9M9.net
数学得意なら圏論から攻めてもいいと思うけど、
モナドは圏論わからなくても使うことはできるので...

293:1
14/09/19 20:19:26.79 KT7u8M0C.net
数学は好きだけど下手の横好きだな。
>>291のことがわかればもうちょっとhaskell好きになれそうなんだけど。

294:240
14/09/19 21:47:04.42 3WQN+no2.net
>>293
それ自体は圏論じゃなくて型クラス。
型gがGameクラスであるためには
そのupdate, render, isGameoverの3つのメソッドが必要だと宣言されていて、
Monadius型はGame型クラスのインスタンスです、
メソッドはそれぞれupdateMonadius, renderMonadius, isMonadiusOverになります、
というもの。

295:1
14/09/19 22:15:41.15 KT7u8M0C.net
>>294
よくわからんがC++のテンプレートやjavaのインターフェースともちょっと違う感じ?

296:デフォルトの名無しさん
14/09/19 22:17:11.20 uV7lv+mi.net
これは最近よく目にするfilter-map-reduceとは違うの?

297:240
14/09/20 07:19:58.23 p45kbQiW.net
>>295
型クラスは値ではなくて型のクラスってところがユニーク。

Haskellの型クラスはJava等のインターフェースより柔軟に使える。
Java等のインターフェースとクラスの関係は、
クラスを定義する時に「このインターフェースを実装します」と宣言するけど、
Haskellの型クラスでは、型クラスと型をそれぞれ別々に定義した上で、
「この型はこの型クラスのインスタンスだよ」と宣言する。
つまり、既存の型や既存の型クラスを使って、後から
「この型をこの型クラスのインスタンスとして使うよ」ということができる。

実は、286のコードでも型クラスのメソッドが多数使われている。
Ord型クラスのメソッドの>とか<とか、Eq型クラスのメソッドの==とか。
あと、game関数やmain関数の型を見ると、IO型クラスを使っていることがわかる。

298:デフォルトの名無しさん
14/09/20 12:34:10.95 rTgfsjb+.net
C++14で型クラス的なconceptってのが入りそうになったけど、
時期尚早ってことで見送られた。
次にStroustrupが簡略化した版が入る予定。

299:デフォルトの名無しさん
14/09/20 17:49:48.64 k+DS8D97.net
>>1は何をしたいんだ。
関数型言語は効率が悪そうたって、「集合論に基づいた言語」とかいうのはもっと効率が悪くなるだろうに。

300:1
14/09/20 22:48:20.83 YTPHYjLC.net
>>297
すいません。後付けできるってのがよくわからないです。
コンパイル時には明示的に宣言しないといけないのは型クラスもインターフェースも同じですよね?

>>299
集合論に基づいた言語は教科書の章末問題をサクサクっとインプリメントすることを目的としてる。
実用性はあんまり求めない。

301:デフォルトの名無しさん
14/09/20 23:24:10.24 rTgfsjb+.net
URLリンク(en.wikibooks.org)
のA concerted exampleと同じことをtype classなしで書いてみれば?
type classがあると細々としたことまで、
少ないコード量で強く型付けできることが分かるはず。

302:デフォルトの名無しさん
14/09/21 13:51:15.50 jEJWijVn.net
>>288
> haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
参照透明の良さっていうのは、逆から言うと、状態が沢山あるコードはクソだ、ってこと。
停止性問題で難題になったのは、状態が少し増えるだけで組み合わせの数が爆発すること。
再代入が減らせれば、コードの複雑性が減ることがあるから、参照透明がありがたい。
関数型の良さは、宣言型言語であること。参照透明は関数型言語の目的ではなく、それを必要としているというだけだ。

生産性が劇的に上がるかというと、c++でテンプレートメタプログラミングしてる人からそれを取り上げたら劇的に生産性が下がると言うだろうし、const をc++から取り除いても劇的に生産性が下がるだろう。
Ruby と haskell を比べても仕方ない。
一つのプロジェクトで一つの言語しか使えないわけではないのだから、部分によって、書きやすい言語、高速な言語、ライブラリの充実した言語を使い分ければよい。
そして Ruby でも関数型スタイルで一部を書くことができる。

なんかちょっと固定観念が強い気がする。
あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。

303:デフォルトの名無しさん
14/09/21 14:55:43.06 hG2OFVWB.net
「集合論に基づいた言語」をつくるうえで参考になるかもしれないということで関数型言語の話が
出てきているんだろうけど、>>1はそれについて、参考になったとか、自分が考えているのとはこう違うから
参考にならなかったという話はせず、効率やら生産性の話をするんだよな。
「集合論に基づいた言語」で効率や生産性の向上を目的としてないなら、関数型言語で効率や生産性の向上が
なくてもどうでもいいことだと思うけど。

304:デフォルトの名無しさん
14/09/21 15:30:26.77 hG2OFVWB.net
無限集合を扱おうとすれば、関数型言語にあるような遅延評価か、論理型言語にあるような全解収集をするしかないだろ。
要素の重複を認めないのなら、生成されたものがすでに集合に含まれているかどうか調べるためのしくみも必要だし。
集合の包含関係はどのように調べるんだろ。

それとも数式処理のようなものを考えているのかな。

305:1
14/09/21 16:27:12.72 iz+Z8HKh.net
>>302
関数型言語には状態がないってのはなんとなくしっくりこないなぁ。
状態はあるけど考慮しなきゃいけないスコープが関数の引数に限られるってイメージなんだが。
あと、参照透過性を守ったって停止性問題が根本的に解決するわけじゃないよね?

>なんかちょっと固定観念が強い気がする。
まあ、おれもいいおっさんだからな。
それなりに固定観念はあるだろう。

>あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
これは自覚症状ないんだが。たとえばどの辺が分かったつもりの発言になってる?


>>303
言語を評価するとなったら効率か生産性かだろう。
集合論に基づいた言語では狭い領域の問題に限り(教科書の章末問題とか)
高い生産性を発揮することを目標にしてる。
関数型言語触ってみたけど>>286のコードに関していえばヒントになるようなものはなかった。
型クラスとかは勉強すれば面白いのかもしれん。

306:1
14/09/21 16:55:50.54 iz+Z8HKh.net
>>304
無限集合は扱いが難しいので、できれば無しの方向で。

307:デフォルトの名無しさん
14/09/21 19:35:49.05 hG2OFVWB.net
無しの方向ってどうするの?
自然数全体の集合等を扱わないとか、内包的記法を扱わないとか。

308:1
14/09/21 20:23:58.88 iz+Z8HKh.net
自然数全体の集合の部分集合は基本的に表現するのに無限のビットを必要とするので。
遅延評価とか使えばある程度ごまかせるかもしれないけど、
遅延評価つかっても無限集合の包含関係とかは計算不能な場合もあるので、無限集合は扱わない方向で。

内包的表記は有限集合だけに使えるようにするとか。

309:デフォルトの名無しさん
14/09/21 20:27:48.01 WCtTxfaP.net
∞という数・文字をあつかえばいい。
{ 2n | n=1,・・,∞}は無限集合。

310:デフォルトの名無しさん
14/09/21 20:40:29.63 WCtTxfaP.net
無限大を扱うのも無限小を扱うのも似通ったもので。1/xで反転するので。
時空間で無限小を扱わない量子重力理論を思い出した。




時空の原子を追うループ量子重力理論  L.スモーリン(カナダ・ペリメター理論物理学研究所)

私たちは空間も時間も連続したものだと考えているが,実は大間違いかもしれない。
相対論と量子力学の統合を目指す新理論によると,「時空の原子」が存在する。
アインシュタインが果たせなかった難問解決の道筋が見えてきた。
量子力学と一般相対論の基本原理を注意深く組み合わせることで,「ループ量子重力理論」が生まれた。
この理論によると,空間は個別の小さな塊からできていて,最小の塊の体積はおよそ1立方プランク長(10-99cm3)だ。
時間の進みは飛び飛びで,その最小単位はおよそ1プランク秒(10-43秒)となる。
ループ量子重力理論は純粋に理論的な研究の成果だが,実際に検証できる可能性がある。
例えば,空間の構造が離散的だとすると,そこを伝わる光のスピードは波長によってわずかに異なる。
この観測が可能な天文衛星が計画されており,時空の離散的構造から生まれる効果が近い将来に確かめられるだろう。
URLリンク(www.nikkei-science.com)

311:1
14/09/21 20:47:19.79 iz+Z8HKh.net
>>309
簡単にいうけど、実際に実装するのは結構難しいんじゃないかな。

312:デフォルトの名無しさん
14/09/21 20:49:08.07 WCtTxfaP.net
量子重力理論でフリードマン方程式に到達 ―築き上げられた「ミクロからマクロへの架け橋」

「ビッグバンの只中に何が起こっていたのか」ということについては、現行の物理学では説明を下すことができない。
この二つを統合させた「全方位的な」理論 が―量子重力理論が ―求められているところであり、研究が進められている。
この度、ドイツとカナダの研究チームによってPhysical Review Lettersに発表された重大な発見は、まさにこの路線に沿ったものだ。

発表された理論によれば、空間はこれ以上分割することのできない、ほんの小さな「土台、構成要素 (building blocks)≒ 素空間」からできているという。
この着想を出発点として彼らが到達したのは、宇宙論の方程式のなかでも最も肝要なものの一つとして見なされている「フリードマン方程式」だ。
今回の成果は、量子力学と相対論が実際に統合可能であるということを示している ―
URLリンク(livedoor.blogimg.jp)

アインシュタインによる一般相対性理論では重力が扱われており、言うなれば「マクロな世界」を一般的に記述するのが相対論だ。他方、量子力学が扱うのは原子や素粒子といったような「ミクロの世界」だった。
両理論ともに、それぞれの縄張りの領域では成功を収めてきたが、プランクスケールのような極限的な状況においては破綻してしまう、という難点が指摘されていた。

水が原子から構成されているのとまったく同じように、空間はある種の「原子」から ―素空間から ―構成されているのではないか、とOriti氏は想像している。
そして、二つの理論を統合することのできるような新たな理論ではこの「空間の原子」を記述することが切に求められるというわけであり、その理論が冒頭でも触れた「量子重力理論」だ。

アインシュタインの相対論では、時空は連続的なものとして捉えられている。
しかし、Oriti氏らによる数学的なタスクでは、空間を極小の「素空間」へと分解して、これに量子力学を適用させることが試みられた。
それにより空間に、ひいては空間を記述する相対論に量子力学を応用してみる、というのがチームの企てだった。
URLリンク(livedoor.blogimg.jp)
URLリンク(blog.livedoor.jp)

313:デフォルトの名無しさん
14/09/21 22:44:17.86 eogfeBgw.net
>>308
>無限集合は扱わない
>内包的表記は有限集合だけに使えるようにする

こういうのはどうするんだ?

p(a,b) : a,bは(0以外の)自然数で、aはbで割り切れる
としたとき、
{x|p(x,1)} = {1,2,3,…}
{x|p(1,x)} = {1}

314:デフォルトの名無しさん
14/09/22 01:03:15.50 SEYHtX5N.net
>無限集合は扱わない方向で。

オートマトンが受理する列の集合が無限集合になることもあるけど
それも扱わないのか?
>>83

315:デフォルトの名無しさん
14/09/22 01:29:01.36 1b5tK9XE.net
ZFC

316:デフォルトの名無しさん
14/09/22 01:30:24.14 1b5tK9XE.net
ブール代数

317:デフォルトの名無しさん
14/09/22 01:32:50.90 1b5tK9XE.net
3値論理

318:1
14/09/22 06:51:14.13 XoUFao4y.net
>>313
両方扱わない。
それは、p(1,x)の計算結果がたまたま有限集合になってるだけで、
定義域は無限集合なので扱わない。

>>314
オートマトンが受理する列の集合を変数として扱うことはしない。
関数として受理するかしないかを判定することはもちろんできる。

>>315
ZFCから導き出される真の式の集合とかは変数として扱わない。

>>316
ブール代数は基本的に有限だよね?

>>317
マイナーすぎじゃね?

319:デフォルトの名無しさん
14/09/22 06:55:11.39 3ofAPdb2.net
>>318
では逆に、HaskellやPythonのリスト内包表記じゃダメな理由は?

320:1
14/09/22 08:32:07.69 XoUFao4y.net
遅延評価が必要になる。
めんどくさい割に実用的じゃないと思う。
haskellの無限リストを使うときだって最後はtakeとか使って有限集合に落とすんでしょ?

321:デフォルトの名無しさん
14/09/22 11:31:48.61 mNTZ+4bu.net
>>291
何の関係もない。

322:デフォルトの名無しさん
14/09/22 11:34:43.17 mNTZ+4bu.net
>>305
>状態はあるけど考慮しなきゃいけないスコープが関数の引数に限られるってイメージなんだが。

それが関数に状態がないということ。
引数が同じなら同じ結果を返す。
数学的な関数の定義に等しい。

323:デフォルトの名無しさん
14/09/22 12:49:44.48 jhj0pzxy.net
> haskellの無限リストを使うときだって最後はtakeとか使って有限集合に落とすんでしょ?

takeのように単純な関数だとは限らない。
ゲーム木の探索の枝刈りのようなややこしい条件で止めたりするから意味がある。

まあただtwitterで、らくだの人と川の人が時々論戦しているように、デフォルトで
なんでもかんでも遅延か、遅延にしたいものだけ明示的に遅延にするのが良いのか?
は、まだ結論が出ていないとは思う。

324:デフォルトの名無しさん
14/09/22 15:09:16.19 SUbucwZ9.net
無限集合を扱わないで

>教科書の章末問題をサクサクっとインプリメントする

のはちゃんとできるのかな。
できるんだったら >>15みたいなことを言わずに最初から有限集合に限定と言えば良いわけで。

325:デフォルトの名無しさん
14/09/22 16:52:16.32 4aSBsr7P.net
有限集合限定なら言語なんか作らずにライブラリで済むんじゃないか。
それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。

326:デフォルトの名無しさん
14/09/22 17:18:16.63 LvPIFofq.net
A. 無知ゆえに(ありきたりな)発想が溢れている人、行動力がある人
B. 知識でがんじがらめになって発想が死んだ人

たいがいこのどっちかに当てはまってしまう。そして結局このスレもAとBとの対立構造に終始して終わる。

327:1
14/09/22 18:14:10.47 XoUFao4y.net
>>322
そういわれるとそんな気もしてきますね。

>>323
ゲーム木の探索で遅延評価使うとminmaxがαβになったりするんでしょうか。
さすがにそこまではない?

>>324
無限集合を使って生産性が上がる例があるなら教えてほしいです。
無限集合は面白い概念だけど扱いが難しい。
正直>>15のときは無限集合の実装の大変さの見通しが甘かったと言わざるを得ない。

>>325
>有限集合限定なら言語なんか作らずにライブラリで済むんじゃないか。
その可能性はありますね。

>それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。
Maximaは昔少しだけ触ったことあるけど色んな事が出来るっぽいですね。
素因数分解とかやらせてみたことあります。

>>326
まあ、最悪なにも形あるものは生み出せなくても私は勉強になってますけどね。

328:デフォルトの名無しさん
14/09/22 19:40:23.96 3ofAPdb2.net
>>326
Aのほうが遥かにマシだな。
ありきたりでも行動していればそのうちありきたりじゃない発想が出る。
行動する人に対して既存の知識を振り回して笑うことしかできない奴は
いつまでたっても何もつくれない。

329:デフォルトの名無しさん
14/09/22 20:07:25.83 SUbucwZ9.net
>>327
生産性が上がる例とかいうのは知らんけど。
俺が何冊か見た集合論の教科書は無限集合を扱ったものばかりだったから、
無限集合を扱えない処理系で
>教科書の章末問題をサクサクっとインプリメントする
なんてできるのかな と思った。

無限集合を扱っている教科書を想定してたから>>15になったんだろ?

330:デフォルトの名無しさん
14/09/22 20:21:24.00 4th1shUN.net
あたし中卒やからね 仕事をもらわれへんのやと書いた
女の子の手紙の文字は とがりながら震えてる
ガキのくせにと頬を打たれ 少年たちの眼が年をとる
悔しさを握りしめすぎた 拳の中 爪が突き刺さる

331:1
14/09/22 20:46:51.62 XoUFao4y.net
>>329
>>15>>13で話振られたから答えただけ。
実は集合論の教科書はあんまり想定してなくて、離散数学の教科書を想定してた。

332:デフォルトの名無しさん
14/09/22 21:29:11.48 UZeuYMIm.net
集合を言語へどう使うか決まってないし、有限・無限とか細かい部分を決めても意味ないだろ。
スタンダードな言語に対して、集合が扱える仕組みが取り込めばいいだけなのかとか。

333:デフォルトの名無しさん
14/09/22 21:48:28.53 m1LWUU3t.net
集合論の教科書を想定せずに
>発想から徹底的に集合論的思想で言語仕様を考える
と言ってたのか…
で、結局、有限集合限定だから
>言語なんか作らずにライブラリで済む
んじゃないか、と…

334:デフォルトの名無しさん
14/09/22 21:54:05.38 LvPIFofq.net
ライブラリを作ってみてライブラリではここが不満だって気づいてから言語作り始めても遅くない。
そういう下地があると1ヶ月くらいでコンパイラを書ける。凡人でも。

335:デフォルトの名無しさん
14/09/22 21:56:13.85 Q+rXpvQc.net
>>330
ファイト!

336:デフォルトの名無しさん
14/09/22 21:58:03.07 M8xWvQpL.net
>>332
>有限・無限とか細かい部分を決めても意味ないだろ。

一番大きい部分だろw

337:デフォルトの名無しさん
14/09/22 22:23:43.15 UZeuYMIm.net
>>336
どういう用途に使うかに強く依存する。
たとえば、プログラムコードは有限だから、それを有限集合で表現するのは可能だろう。
最初に何に使うのかが決まらないと、有限・無限はどうするか決まらない。

338:デフォルトの名無しさん
14/09/22 22:31:18.61 M8xWvQpL.net
>>337
>たとえば、プログラムコードは有限だから、それを有限集合で表現するのは可能だろう。

何言ってるかさっぱり分からん。

>有限・無限とか細かい部分を決めても意味ないだろ。

とどう関係するんだ?

339:デフォルトの名無しさん
14/09/22 22:51:19.51 UZeuYMIm.net
任意のプログラムコードを、ある自然数に対応させることは可能のはずだ。この値は有限値で。
具体的には、ゲーデル文構成のようにしたらいいと思うが良くはわからん。



ゲーデルの不完全性定理 - Wikipedia
ゲーデルの不完全性定理とは、数学基礎論における重要な定理の一つで、クルト・ゲーデルが1930年に証明したものである。
ゲーデル文の構成
ゲーデル数というテクニックを使って間接的に自己言及を可能とし、ゲーデル文を構成する。
コンピュータでは全てのデータを一意な数値で表しており、特に文字列や論理式そして論理式の列も数値で表す。
このように、論理式を数値で表す行為を論理式のゲーデル数化といい、命題Pに対応する数値をPのゲーデル数という。

340:デフォルトの名無しさん
14/09/22 22:56:41.54 UZeuYMIm.net
ゲーデル数 - Wikipedia
ゲーデル数は、数理論理学において何らかの形式言語のそれぞれの記号や整論理式に一意に割り振られる自然数である。
一般化
計算可能性理論において、「ゲーデル数化」は上述よりさらに一般化した意味を持つ用語として使われる。
1.形式言語の構成要素に自然数を割り当てて、形式言語の構成要素の操作を、数を操作するアルゴリズムでシミュレートできるようにする。
2.より一般化して、枚挙可能な数学的オブジェクトに自然数を割り当てて、その数学的オブジェクトにアルゴリズム的操作ができるようにする。
これは数というよりも文字列を操作する計算模型(チューリングマシンなど)に必須の考え方である。



チューリングマシン - Wikipedia
チューリング機械とは次の7つ組である。
URLリンク(upload.wikimedia.org)
Q は有限集合であり、その元を状態という。
Γ は Q に交わらない有限集合であり、字母とよばれる。その元を記号という。
b は Γ の元であり、空白記号とよばれる。
Σ は Γ - {b} の部分集合であり、入力字母とよばれる。その元を入力記号という。
δ は Q × Γ から Q × Γ × {left, right} への写像であり、遷移函数とよばれる。δ(q, a) = (q', a', m) は、
「現在の状態が q であり、着目位置にある記号が a であれば、状態を q' に移し、着目位置に記号 a' を書き込んでから、着目位置を m 方向に1つずらす」と読む。
qinit は Q の元であり、初期状態とよばれる。
qacc は Q の元であり、受理状態とよばれる。

341:デフォルトの名無しさん
14/09/22 23:19:51.98 M8xWvQpL.net
お前アホだろ。
>プログラムコードは有限だから
ってコード長が有限ってことを言いたかったのかよ。

342:デフォルトの名無しさん
14/09/22 23:51:04.16 UZeuYMIm.net
言語の開発以前に、無限にするか、有限にするか決めたとして。
有限の範囲ではおさまらない具体的な例・モデルってあるのか?
既存のコンピュータ、ノイマン型は、有限集合で操れるから具体的にイメージ出来ない。

343:デフォルトの名無しさん
14/09/23 00:04:48.04 FXTBDWVe.net
とりあえず有限長の語の集合が無限集合になりうることくらいは理解してくれ。
証明が無限を扱うことと、証明長が有限なことは全然別の話。
プログラムにしても同様。

344:デフォルトの名無しさん
14/09/23 00:11:51.00 dVlUahkv.net
>>343
それは分かってて。
さきに無限を使うと選択した場合、具体的な利用法が不明。
既存のプログラム、有限集合で扱える範囲を超えなかったら意味が無い。

345:1
14/09/23 00:23:18.08 oT3Rknt8.net
>>344
計算不能な集合を扱いたいの?

346:デフォルトの名無しさん
14/09/23 00:32:18.88 dVlUahkv.net
言語を開発する上で、既存の有限集合に基づくモデルで十分だという立場。
無限を扱うメリットを知りたい。

347:デフォルトの名無しさん
14/09/23 00:50:04.92 dVlUahkv.net
無限小、無限大を取り込んでない、自然数に基づく数学に、あとから無限小、無限大を取り入れても矛盾しない。





超準解析 - Wikipedia
超準解析ではイプシロン-デルタ論法によって一度は数学から追放されたと思われた、無限小や無限大という極限に関する古典的で
直観的な感覚、すなわち、いわゆる実数論にもとづかないライプニッツ流の古典的な微積分を数学的に厳密に定式化し、取り戻すことができる。
このような古典的な微積分におけるオリジナルな無限小解析学とは区別されることもある。
アブラハム・ロビンソンによって考案された。超準解析の基本的な手法である超積はアラン・コンヌらによって作用素環の研究に応用されてもいる。
超実数は実数を拡張した数概念である。実数体に無限小・無限大を加えたものは体をなし、超実数体と呼ばれる。
超実数体は *R, R* などと表記される。その元を超実数という。



Rubyによる 超準解析 クラス.(HyperRael,MathExt)
超実数体とは,(大雑把に云えば) 実数体にライプニッツ的な無限小を添加して出来る体のことだ.
微分等, 通常の実数では limit を使う場面で, 超実数体内部の四則演算として直接求めることが出来る.
超準的な計算では, 無限小や∞の強さもわかるので無限小/無限小, 無限小*∞, ∞/∞ 等の計算が矛盾無く解釈可能となる.
ただし単なる体なので, 真の0(無限小でなく) については, 0*∞=0 で, 0/0 や 1/0 は定義されない.
この点は IEEE754 的な浮動小数点計算で 1.0/0.0 で Infinity を返すような気持の悪さは解消できる.
URLリンク(www.math.kobe-u.ac.jp)

348:デフォルトの名無しさん
14/09/23 00:58:09.60 IDDuvAyc.net
んなもん、チューリング完全な言語は能力同等なんだから
無限をその言語機能で直接書きやすく実行効率よくするかどうかの判断しだいだよ
で、1はもう無限を直接扱うのはあきらめたんでしょ

今度は有限の制約があっても、1が元々やりたかった範囲がカバーできてるのかって問題になるわけだが、
「やりたかった範囲」がぼんやりしてるからこれ以上はわからんわな

349:デフォルトの名無しさん
14/09/23 01:02:03.65 IDDuvAyc.net
おっと書きわすれた。まあ俺もみんながいってるように、
まず既存言語+ライブラリでやりたいことがどの程度できるのか確かめる
のがいいと思うけどね

350:デフォルトの名無しさん
14/09/23 11:31:06.71 5tA+8B0p.net
無限集合を扱わない代わりにストリームを集合として扱えるようにしようぜ

351:デフォルトの名無しさん
14/09/23 11:38:18.07 yLd7Mbmy.net
無限集合を扱うのが困難なように言っているが、どういう操作を実装するか次第だろう。
例えば分数ライブラリがあるが、必要になればいくらでも循環小数や無理数の桁を取り出せ、しかし普段は分子と分母を保存しておくだけ。
それをさらに除算以外の演算もサポートした、値を式で保持するライブラリもある。
実際に何かの集合を扱うたびに本物のコンテナを生成するよりもマシな気がするけど。

>>305
> 関数型言語には状態がないってのはなんとなくしっくりこないなぁ。
変化しないものは状態といわない。
例えば人間には生と死という状態があるが、親が人間かどうかというのは変更がないから状態とはしない。
プログラムでいえば再代入のあるものが状態だ。
c/c++のconst変数は建前では参照透明だ(キャスト、mutableがであるので実際は違う)。
本当に関数型言語に状態がないかどうかは言語によるし、システムコールによる副作用があっても参照透明と呼ぶのはレトリックと言われても仕方ない気もする。
特定の言語自体の価値よりも、関数型プログラミング的テクニック全体に価値がある。c++でもPythonでも使える。

> あと、参照透過性を守ったって停止性問題が根本的に解決するわけじゃないよね?
難題とか複雑性が減るとかいう表現を使ったのは、停止性問題の証明には関係ないからだよ。

> これは自覚症状ないんだが。たとえばどの辺が分かったつもりの発言になってる?
>288 を読んで知ったかぶりらしく思わない人がどれだけいただろうか。

352:デフォルトの名無しさん
14/09/23 12:03:18.67 9ll4fKxj.net
>>326は嘘で、無知で発想が支離滅裂で実行力もない人が多いみたいです。

353:デフォルトの名無しさん
14/09/23 16:14:06.99 49Grt2TR.net
実装に寄らないクラス定義、メソッド、オペレータ、その処理の定義決めればいいんじゃね
オペレータオーバーロードできない処理系ではオペレータの代わりにメソッド実装でいいし、しっかり概念が定義されてたらどの言語にも移植できるやん

354:1
14/09/24 20:26:39.07 sdype2Aq.net
うーん。とりあえず、集合のリテラルがある言語、またはリテラルを自作できる言語ってある?

355:デフォルトの名無しさん
14/09/24 20:34:18.13 Z2e1BcPM.net
C++11

356:デフォルトの名無しさん
14/09/24 20:46:24.29 c/ueWxaZ.net
Pascalの型に集合はあったけど、リテラルあったっけ?

357:1
14/09/24 21:32:20.18 sdype2Aq.net
C++11すげぇw
正気の沙汰とは思えないw
しかしこれ、setみたいなテンプレート型のリテラルもちゃんと作れるのかなぁ?

358:デフォルトの名無しさん
14/09/24 21:47:35.83 icQzJbDu.net
つうかC++11使ってリテラル定義しなくても、初期化子書けばいいだけ。

359:1
14/09/24 21:59:47.35 sdype2Aq.net
std::initializer_listなんてものもあるのか。
世の中知らないうちに便利になってるな。

360:デフォルトの名無しさん
14/09/24 22:19:34.82 u+CQqrHx.net
VDM URLリンク(en.wikipedia.org)
Z URLリンク(en.wikipedia.org)

361:デフォルトの名無しさん
14/09/25 22:46:08.06 paFK2VHq.net
>>1 >>360
あーまだそんなこと言ってるのか

362:1
14/09/26 20:57:23.89 TQ6i6UUU.net
C++11結構面白そうだが完全準拠したコンパイラが無いっぽい?

363:デフォルトの名無しさん
14/09/26 21:17:42.44 v6QeAlLd.net
お前のOSにゃ無いかもしれんな

364:1
14/09/26 21:24:17.23 TQ6i6UUU.net
とりあえずVisual Studio 2013 Express でいじってみてるけど結構楽しい。

int _tmain(int argc, _TCHAR* argv[])
{
set<set<int> > a = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
for (auto i : a){ for (auto j : i) cout << j << " "; cout << endl; }
return 0;
}


とか書けていい感じ。

365:デフォルトの名無しさん
14/09/26 21:37:43.18 rLR78veI.net
>>1はC++のように集合が扱える言語が実現したいのか?
一部のスクリプト言語だったらかなり以前からできていなかったか。
CでもC++でも以前から、ライブラリで拡張したら集合は扱えたはずだろ。

366:1
14/09/26 21:56:27.24 TQ6i6UUU.net
>>365
個人的にはもうちょっと言語の設計が根本から変わるようなものが
集合にはあるんじゃないかと思ってるんだが。
それがなんだかは分からないw
いまのところ集合を普通のライブラリとして用意する以上のアイディアは出てない。

367:デフォルトの名無しさん
14/09/26 22:40:52.33 mU/FSdzC.net
>>856 の続き)

始めは「考えられるリスクの低減」から
・ライブラリや共通部品の多くは(アルゴリズムやデータ変換を実現する単純なものもあるが)
 データベース/ファイル/ネットワーク/プロセス間通信といったプログラムの
 外部インターフェイス処理が多くを占める
 これらを実装するには、プログラマにシステムコールや標準ライブラリ(>>829)、
 そして社外のライブラリや社内の共通部品等等、幅広い知識が求められる
 これを経験の浅いメンバに負わせるのは無謀
・ライブラリ/共通部品の実装技術は機能仕様(=ビジネスルール)には依存しないから、
 類似のシステム開発プロジェクトがあれば、類似の実装になる
 もしライブラリ設計担当がいくつかのプロジェクトを経験したベテランであれば、
 過去の(失敗を含めた)経験から、既存の設計やコードを改造母体にして短期間で設計できる
 これと同じことを経験の浅いメンバに期待するのは無茶
・万が一、ライブラリ/共通部品の開発日程が遅延して結合テストに間に合わなかったり、
 結合テストでバグが多発する事態になれば、その影響はプロジェクトの全体に及ぶ
 もしモスク(>>856)の中位/上位層であれば影響範囲は限定的だし、
 その炎上の火消しのためにライブラリ/共通部品を担当させて余力のあるベテランを投入できる
 (当然、ライブラリ/共通部品設計には日程厳守(or 前倒し)と高品質(=バグ0)をベテランに要求する)

368:1
14/09/26 22:44:11.22 TQ6i6UUU.net
>>367
仕事でやってんじゃないんだから好きにさせろ。

369:367
14/09/26 22:44:51.94 mU/FSdzC.net
>>367 は誤爆だから無視してくれ、スマソ

370:1
14/09/26 22:55:37.85 TQ6i6UUU.net
誤爆とは思えないほどスレの流れに合ったレスだったが。
まあいいや。

371:デフォルトの名無しさん
14/09/27 12:16:01.73 Tn3/IHEN.net
オメガってZFに基づいた言語がアメリカにあったはずだが見つけられない。
集合はsetとclassの型付け。
上にある仕様記述言語Zとは別。

372:デフォルトの名無しさん
14/09/28 20:41:53.96 T/KmqFBE.net
>>1
>>360についてはどうなのよ?

373:1
14/09/28 21:20:59.19 ngbZk+Gk.net
>>371
すまん。あんまりちゃんと読んでない。
wikiだけじゃよくわからんというのが素直な感想。
それに英語は大の苦手。

374:1
14/09/28 21:21:51.62 ngbZk+Gk.net
安価ミス
>>372

375:デフォルトの名無しさん
14/09/28 22:47:39.25 qFZf/al/.net
>>373
URLリンク(homepages.cs.ncl.ac.uk)
URLリンク(www.cs.ncl.ac.uk)
URLリンク(spivey.oriel.ox.ac.uk)
URLリンク(staff.itee.uq.edu.au)

英語が苦手なのに
>しかたないのでこのスレは>>4とかの言語を勉強するスレにするか。
と書いたのか。

376:1
14/09/28 23:24:45.68 ngbZk+Gk.net
>>375
英語苦手なのでこれを読むのは結構時間かかると思う。
まあ、ぼちぼち頑張る。

377:デフォルトの名無しさん
14/09/28 23:48:18.69 qFZf/al/.net
>>376
URLリンク(homepages.uel.ac.uk)
URLリンク(www.cs.nott.ac.uk)
URLリンク(formal.iti.kit.edu)

378:1
14/09/29 00:04:52.39 O3Lh9EkL.net
>>377
こっちのほうが入門っぽいの?
まあ、あんまプレッシャーかけんなや。

379:デフォルトの名無しさん
14/09/29 01:12:43.07 1qhCFqkI.net
>>360についてどう思うかたずねられる →「wiki(pedia)だけじゃよく分からん」
詳しく書かれている文書を提示される →「読むのに時間がかかる」
もっと短い文書を提示される →「プレッシャーかけるな」

380:デフォルトの名無しさん
14/09/29 13:28:38.13 AXPWss48.net
>>1
センスは悪くないが、致命的に勉強が足りんな

381:1
14/09/29 18:35:35.54 O3Lh9EkL.net
>>379
このスレで提示されたもの、俺が全部勉強しなきゃいかんのかと思うとちょっと怖いんだが。
>>380
勉強不足なのは認める。

382:デフォルトの名無しさん
14/09/29 20:16:07.80 onaWAXdx.net
どっちに進んだらいいのか分からないんだから、提供された情報を手がかりにして、
wikiだけじゃ分からんとか言わずに自分で情報をさがして勉強するしかないだろ。

情報を提供してもらうためにスレを立てたんだろ。

383:1
14/09/29 20:43:37.99 O3Lh9EkL.net
>>382
スレたてた時は軽い気持ちだった。
なんかこんなガチな感じのスレになるとは思ってなかったと言わざるを得ない。

384:1
14/09/29 20:52:49.67 O3Lh9EkL.net
>>377
ちょっとだけ読んでみただけだから誤解があるかもしれないけど、
これは仕様をガチガチに固めるためのもの?
こんなこと言うと批判がありそうだけど俺としてはbashやRubyみたいに緩い感じでコーディングして
仕様変更があってもちょちょっとハッキングすれば何となく動いちゃうみたいのが好みなんだけど。

385:デフォルトの名無しさん
14/09/29 22:24:17.39 MPdknRrK.net
>>383
>>365の言うとおりだけど、不勉強だから、
「発想から徹底的に集合論的思想で言語仕様を考える」って大風呂敷を広げてしまったわけだ。

386:1
14/09/29 22:46:32.46 O3Lh9EkL.net
>>385
まあ、ぶっちゃけ俺には>>365を超えるような大したアイディアがあったわけじゃないな。
みんなで雑談してるうちに面白い話が聞けたらいいなぐらいの気持ちだった。

387:デフォルトの名無しさん
14/09/29 22:53:43.66 6QlMlDt4.net
Python の set とかってイメージしてる "集合" とはどういう関係にあるのかな

388:デフォルトの名無しさん
14/09/29 23:54:29.23 4aZKHf7r.net
Zは仕様記述言語だよ。
Notationと言われているように、日本語だと記法と言ってもいいかもしれない。

389:デフォルトの名無しさん
14/09/30 00:05:52.09 lw4FII9v.net
>>386
大風呂敷を広げている自覚があるならたためばいいのに。
>>365には「そのとおりだ。不勉強だから『発想から徹底的に集合論的思想』などと大風呂敷を広げてしまっていた」と言い、
>>360には「情報ありがとう。でも考えているのは>>365のようなものだからVDM等とは方向が違う」とでも言えばよかったのに、
「言語の設計が根本から変わるようなもの」とか言い出すし。

390:デフォルトの名無しさん
14/09/30 00:27:57.32 QoKiTOmo.net
過去の発言をあげつらうとか無粋なことを‥
そのときどきで感想がぽつぽつ上がってそこから何かが生まれればよし、そうでなくてもいいので、こうしてお付き合いしているわけだし‥

391:デフォルトの名無しさん
14/09/30 00:47:37.34 63XDoi4/.net
1の興味がどっちに向いてるのかはっきりさせとかないと、誰かが>>360のように情報を出してくれても、
1は興味を持てず理解もできず、情報を出してくれた人を無視することになるわな。

392:デフォルトの名無しさん
14/09/30 04:58:34.96 AOM1YMTX.net
一次元で言ったら
(1-5) | ( 2-6) | (3-9) | (9-10) = (1-6, 3-10) こういうの返すとか
2次元だと、GDIなんかでもよくあるリージョン計算とか
三次元にも応用してとか
言語にこだわらず、集合表記決めて興味持った人が各言語で実装するのがいい

393:片山博文MZ次期CEO ◆T6xkBnTXz7B0
14/09/30 07:28:17.49 JjKI4EMd.net
ひらがな電卓Calc-Hだと、
「ろくのやくすうはなんですか」とか
「じゅうにいかのそすうは」とか
「よんのばいすうはにでわりきれるか」とか
「いちいじょうのろくのばいすうは、ごよりおおきいさんのばいすうか」
といった質問に答えられるんだけど。参考までに

394:デフォルトの名無しさん
14/09/30 12:59:47.25 X/itkzZm.net
>>381
勿論勉強なんか最低限でよい。
ただ集合言語を論じるなら、「Z」と「集合論プログラミング」(ググれ)
のさわりだけはおさえとけ(それだけでいいよ)

395:デフォルトの名無しさん
14/09/30 15:20:16.06 3YX+fixm.net
さわりは音楽でいうサビかイントロか。
イントロと間違う人も多いだろう。

396:デフォルトの名無しさん
14/09/30 16:07:43.18 tX5UXYDw.net
そりゃサビだろ
最低限なんだから大事なところ押さえないと

397:1
14/09/30 20:27:22.22 p23v2Yf3.net
>>389
まあ、大風呂敷を広げた方が話が盛り上がるかと思って。

>>391
正直すべてのレスをフォローするのはしんどいかも。
方向性はまだ固まってないです。

>>393
結構、ことばがわかりません。ていわれる。
いまのでも結構すごいがこれを実用までもっていったらかなりすごいと思う。

>>394
Zはオブジェクト指向でいうUMLみたいなもん?
集合論プログラミングはぐぐったけどCiNiiの論文がヒットした。
プレビュー読んでみたけどアルゴリズムを自動生成するの?
確かにすごいし理屈も通ってると思う。
これの処理系がすでにあるなら触ってみたいけど、
自分で実装しようとは思わないw。大変すぐるw。

398:1
14/09/30 21:50:21.63 p23v2Yf3.net
集合論プログラミングは確かに言語の設計が根本から変わってると思う。
こういう情報が得られるだけでもスレをたてた甲斐があるというもの。

399:デフォルトの名無しさん
14/09/30 22:19:13.15 ic/LPcqx.net
>>398
わざわざスレを立てなくても 集合論 プログラミング でググればすぐ見つかるんだけど。
「発想から徹底的に集合論的思想で言語仕様を考える」と言っておきながら
その程度の検索すらしてなかったんだな。

400:1
14/09/30 22:29:12.29 p23v2Yf3.net
>>399
まあな。

401:デフォルトの名無しさん
14/09/30 23:59:40.07 izhA5Hzv.net
>>397
アルゴリズムの自動生成をするわけではなく、論理式を使って書かれた
仕様を元にして人間がプログラムを作っていくもので、VDMやZと同じ
方向なんだけど、感想がずいぶん違うな。>>384 >>398

402:1
14/10/01 06:02:07.09 0+f79Okt.net
>>401
VDM  書いたものが実装にならない
集合論プログラミング  書いたものが実装になる

と思い込んでたからな。
どっちも書いたものが実装にならないならあんまり俺の趣味じゃないなぁ。
集合論プログラムは書いたものが実装になってもよさそうなほど
論理を詰めていたように見えたが気のせいだったか。

403:デフォルトの名無しさん
14/10/01 09:03:58.23 Srlu7drV.net
>>402
VDMは実行可能だ

404:デフォルトの名無しさん
14/10/01 11:04:19.89 PsfjCcq+.net
>>398
やっぱりアンタはセンスが良い。というかこれから何かできる人だ。
集合論プログラミングはZなんかに比べるとマイナーだが、Zより実質がある。
実装もできる。アンタが土台にするべき言語はこれじゃないかな?
検索してないとかなんとかというノイズは無視していいよ。

405:デフォルトの名無しさん
14/10/01 14:56:19.11 BreyGGJ4.net
>>402
論理式を使って、プログラムに自動的に変換できそうなほど詳細な仕様を書くのは、
>緩い感じでコーディングして仕様変更があってもちょちょっとハッキングすれば
>何となく動いちゃうみたいの
とはかなり違うわな。

406:1
14/10/01 19:43:26.77 0+f79Okt.net
>>403
どうゆう意味で実行可能なの?
他のプログラムの外付けアサート的な動作しかできないのかと思いこんでいたが。
VDM単体で動くの?

>>404
俺をおだてても木には登れんぞ。
集合論プログラムのコンパイラを作るなんて俺の実力じゃとても出来そうもない。
ユーザーとしてなら使ってみたいが。

>>405
仕様を詳細にするのはやり方がまずいと柔軟性のないプログラムになると思う。
抽象度の高いプログラムで仕様を満たせるならそっちの方がいいと思う。

407:デフォルトの名無しさん
14/10/01 19:49:09.29 OzkCABBw.net
>>406
インタプリタで実行できる

408:1
14/10/01 20:28:28.86 0+f79Okt.net
>>407
まじで。英語だからちゃんと読んでないけど>>360のwikiにsqrtの例で

SQRT(x:nat)r:real
post r*r = x

とかいうのがあったからこりゃ単体じゃ実行できないなと思ったんだけど。
早計だったか。

409:デフォルトの名無しさん
14/10/01 20:39:41.94 OzkCABBw.net
>>408
VDMには実行できるexplicit specと実行できないimplicit specがある。
その例は実行できないimplicit specのほう。
このリンク先のはみな実行できるexplicit spec
URLリンク(www.vdmtools.jp)

410:1
14/10/01 21:57:06.59 0+f79Okt.net
>>409
なんか、サンプルプログラムよんでもイメージが湧きづらい。。。
文字列操作の前後のスペースをトリミングとか何やってるのかよく分からん。

[ p | p in set inds org & org(p) <> ' ']がorgの空白でない文字のインデックスの集合で
パターンマッチでその集合の先頭と末尾を取り出してる。
sがorgの空白じゃない最初の文字のインデックスでeがorgの空白じゃない最後の文字のインデックス
でorg(s,...,e)で頭とおしりの空白を取り除いた文字列を返してるってこと?

411:1
14/10/01 22:21:29.56 0+f79Okt.net
[]は集合じゃなくて列か。

412:デフォルトの名無しさん
14/10/01 23:50:12.62 PsfjCcq+.net
>>409
クソVDMなんか持ってくるんじゃねえよ。
お前はセンス悪い。

413:1
14/10/02 12:38:59.14 CtSzUDAx.net
あれ?乗っ取られてる?立てただけでちょっと居なくなったすきに…

414:1
14/10/02 18:33:20.87 McIgqFFk.net
>>413は偽物。
といっても俺も本物だと証明できるものはなにも持ってないな。
まあ、何が本当かは皆さんの判断に任せるとしましょう。

415:デフォルトの名無しさん
14/10/02 19:01:12.47 J690LAeG.net
ここって>>1となれ合うスレ化してるから、馴れ合ってる1こそが1

416:デフォルトの名無しさん
14/10/02 19:52:03.79 sULo4gIN.net
>>414
トリップっていうのをつけたら?
URLリンク(detail.chiebukuro.yahoo.co.jp)

417:1
14/10/02 20:07:14.68 McIgqFFk.net
>>416
今からトリップつけても過去のスレに対してはなんの証明にもならんけどな。
今からでもみんなが付けろっていうなら付けるが。

418:デフォルトの名無しさん
14/10/02 20:38:47.31 sULo4gIN.net
>今からトリップつけても過去のスレに対してはなんの証明にもならん
それは>>415のように考えるしかない。

419:1
14/10/02 20:45:42.53 McIgqFFk.net
>>418
まじでw

420:1
14/10/03 20:31:44.20 dWJ2kSUt.net
Rubyだとトリミングはstr.stripで一発だな。
ライブラリつかわんでもstr.gsub(/^ +/,"").gsub(/ +$/,"")でワンライナーか。
この比較がフェアかどうかは微妙だが、Rubyと比べてVDMは読むのしんどいな。
慣れてないだけかもしれんが。

421:デフォルトの名無しさん
14/10/03 22:20:11.35 wImYRAo7.net
>>420
的外れな比較だな。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch