集合論に基づいた言語を作りたい

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2014/08/10(日) 21:27:16.56ID:x7G32Sd0
計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
119デフォルトの名無しさん
垢版 |
2014/08/17(日) 10:51:34.94ID:ruDVRpF3
こっちのクイックソートのほうが短くわかりやすかった。


クイックソート - 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))
}

http://paulownia.hatenablog.com/entry/20111204/1323015703
120
垢版 |
2014/08/17(日) 15:08:45.66ID:wbAX39n3
本屋めぐってきたけどOcamlの本なかったわー
廃れてしまった言語なん?
しかたないからwebで情報探すか。
2014/08/17(日) 15:31:49.05ID:8WbwPRMF
ググれば数秒でみつかるのに。
http://caml.inria.fr/resources/index.en.html
2014/08/17(日) 16:03:30.63ID:PGXi6tC2
>>109
> うーん。そうなんですか。でもそれだとこのスレが終わってしまうw
いいことじゃん。
続きはブログでやってくれ。
123
垢版 |
2014/08/25(月) 19:07:11.02ID:DrxGPTGS
とりあえず、Ocamlでconnect4のルールだけ作ってみた。
だれか添削たのむ。
http://www.age2.tv/rd05/src/up3979.txt

connect4はこことかで遊べます。
http://www.connectfour.org/connect-4-online.php
2014/08/25(月) 19:28:01.77ID:vcy2nNqb
以下>>1がOCamlを勉強するスレ
125
垢版 |
2014/08/25(月) 19:30:28.60ID:DrxGPTGS
いやw今はそうだけど、そのうち本題に戻りたいとは思ってる。
2014/08/25(月) 20:06:42.36ID:l0tzbBCe
この思考エンジンで。GUIはすでにあるから思考部だけ。



http://www.vector.co.jp/soft/win95/game/se401975.html

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

ルールは簡単!
1) 黒白交互に打っていき、先に縦・横・斜めに7つ石を並べたほうが勝ち
2) その間に相手の石を囲んで取ることが出来る
127
垢版 |
2014/08/25(月) 20:15:54.91ID:DrxGPTGS
ばかやろーw
囲連星つったら今までまともなAI作れたの2人しかいない難題じゃねーかw
もっと簡単な奴にしろw
2014/08/26(火) 17:44:18.47ID:Yj5Hd+B/
総当たりができなければモンテカルロでやりゃ良いじゃん
もっと素晴らしいのを見つけて欲しいな
129
垢版 |
2014/08/26(火) 19:40:10.91ID:FDxVWnbU
モンテカルロなら簡単だとおもってるな?
そんな甘くないから。
今のLV3のプログラムは相当レベル高いから。
2014/08/26(火) 20:14:52.44ID:k5rL1v3w
>>1程度の習熟度だとそうかもな
131
垢版 |
2014/08/26(火) 20:22:34.58ID:FDxVWnbU
>>130がLV3に勝ち越す囲連星AI作ったら納得してやる。
2014/08/26(火) 20:44:26.53ID:k5rL1v3w
>>1「これ知らなーい、あれも知らなーい」ばかりで、
挙句の果てには「数学のテクニックをプログラミングに持ち込めるかなと思った」だもんなあ。どんだけ無知なんだよ。

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

せめてスレタイに沿うような問題設定ができるまで学習しろ。
適切に問題設定ができないのに、コードをこねくり回したって意味ない。そりゃ只の自慰行為だ。
2014/08/26(火) 20:54:37.89ID:FDxVWnbU
>>132
俺が無知なのは認めるが、おまえが威張るのはLV3を超えるAIを作ってからだ。
そうでなきゃお前も口だけだぞ。
2014/08/26(火) 21:07:11.73ID:k5rL1v3w
別に威張ってないよ?
>>1の習熟度だと難しく感じるだろう、と言っただけ。

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

ところで、>>1のやりたいことって何だ?スレタイとは違うのか?
135
垢版 |
2014/08/26(火) 21:15:57.51ID:FDxVWnbU
まあ、一応スレタイの通りだな。
スレの方向はずれてきているが。
とりあえず、関数型言語を触ってみてるところだ。
2014/08/26(火) 21:47:40.66ID:UhLj/9Xy
LV3は大して強くない。手動でほぼ100%勝てる。
たぶんプログラムでも勝てると思う。
これは囲碁と違って有効手が見付けやすくモンテカルロ法は向いていないと思う。
2014/08/26(火) 22:01:43.24ID:2ww4+7z5
ダメダメだな。いつまでたっても何もできそうにない
138
垢版 |
2014/08/26(火) 22:10:51.94ID:FDxVWnbU
>>136
手動なら俺だって勝てるわ。
ほぼ100%とはいかないけど。
プログラムで勝ち越すことに意義がある。
LV3に勝ち越して人間相手にも自然な手を返せるプログラムが作れるってならぜひ作ってほしいね。
一囲連星ファンとして。

>>137
その可能性は非常に高いw
2014/08/26(火) 22:21:22.44ID:2ww4+7z5
ふーん。ならスレ終了でOKだな
140
垢版 |
2014/08/27(水) 18:26:42.61ID:VCMYq2O7
>>139
まあ、そうあせらずに。
どうせ過疎板だ。
ノンビリ行こう。
2014/08/27(水) 19:44:52.25ID:FS966Rgy
はあ?これ以上妄言を垂れ流すならブログでやれば?
2014/08/27(水) 21:12:10.16ID:sWLZW0su
1のスレだし見たくないやつが来なければ済む
143
垢版 |
2014/08/28(木) 19:02:16.77ID:NyU3eawL
しかしOcamlはプログラム組みにくいな。
ちょっとしたことやるにも再帰関数つかうっぽいし。
慣れてないだけかもしれんが。
2014/08/28(木) 19:15:00.80ID:Qmt6TOBF
慣れてないだけ。
2014/08/28(木) 19:38:25.81ID:RkFVOWz2
>>143
http://peace.2ch.net/test/read.cgi/tech/1330429547/413-418
146
垢版 |
2014/08/28(木) 20:42:22.39ID:NyU3eawL
>>145
俺がこんなこと言っちゃいかんのかもしれんが、
確かに参照透過性とか数学的にはいいのかもしれんが、
実用性では怪しく感じる。
2014/08/28(木) 22:22:22.57ID:wWKXD6ik
純粋関数型でない、参照透過性がないのは、手続き+αの手続き型言語。
2014/08/28(木) 22:43:29.27ID:wWKXD6ik
2032 年の FPGA: 20年後の FPGA の未来像
Tabula 社社長兼 CTO の Steve Teig 氏は、次のように断言しました。
「FPGA のプログラミングに関して言えば、RTL は適していません。しかし、C はさらに問題があります。
直列実行から並列実行への移行でさえも低レベルすぎます。
Haskell のような関数型言語の方がましですが、ほとんどの関数型言語がベースとしている数学的抽象化であるラムダ計算も最適な抽象化とは思えません」
Blainey 氏も同じ意見のようで、ソフトウェアを FPGA 構造に変換するライブラリおよびコンパイラを備えた明示的並行言語が広く普及するとともに、
特定の種類の問題を扱う関数型言語プログラマのエリートが現れることになると予想しました。
http://www.altera.co.jp/technology/system-design/articles/2012/fpgas-in-2032-the-acm-fpga-2012-workshop.html




現状でさえマルチスレッドプログラミングは開発の困難さが指摘されている分野である。
Sweeney氏は、これは現在主流の開発言語であるC++の手続き型言語としての特性に由来すると指摘する。
Sweeney氏は、この問題を解決するためには、ゲーム開発言語として純粋関数型の言語が必要になるだろうと言う。
この種の処理系では、C++のような共有メモリのアクセスや、I/O操作は基本的に行なえない。
その引き替えとして、各関数のアトミック性が構造的に保証されており、安全に並列実行できるのだ。
しかも、コンパイラが対応さえすれば、関数を自動的に多数のコアに分散処理させることができるというスケーラブルな実行バイナリを作り出せる。
Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
http://game.watch.impress.co.jp/docs/20080911/epic.htm
149
垢版 |
2014/08/28(木) 23:08:29.08ID:NyU3eawL
>>148
CPUコアが1万個くらいあるならこういうパラダイムシフトも起きるのかもしれんが。
20年後どの程度ハード進歩してんのかね。
2014/08/29(金) 00:59:50.98ID:4AjKkLEL
>>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の意図通りのディテールをすべて体験することができる」とのことです。

http://magazine.kakaku.com/mag/pc/id=1687/
2014/08/29(金) 14:03:44.10ID:/HNlnXLI
>>146
停止性問題さえ知らないのか。
参照透明性はプログラムを解析しやすくする。
C/C++ で const の少ないソースを見たら気を付けろ。
実用でいえば、コンパイラが最適化するときに全ての中間式に仮の名前を付けて const 変数として扱い、
例えばループの外に追い出すためのスコープ中で不変な部分を探すために使ったりするが、
これは参照透明な範囲を見つけるためだと言えるだろう。
手続型でプログラムをしていても、なるべく参照透明を保った方がいいし、参照透明な範囲を意識しておいた方がいい。
152
垢版 |
2014/08/29(金) 19:54:56.85ID:5NUrtg1w
>>150
GPGPUはまだ実用って感じじゃないなぁ。
限られた問題しか上手く解けないイメージがある。

>>151
俺もC++書くときはconstつけられる場所はなるべくconstつけるようにしてるけど、
constつけられるメンバ関数って単純な処理やってる場合が多いつーか
やっぱクラスの肝となるメンバ関数にはconstつけられない場合が多いつーか。
std::vectorだと単純なsize()なんかはconstつけられるけど肝となるpush_back()にはつけられないみたいな。
2014/08/29(金) 20:31:28.66ID:6XulYCBt
>>148
【Python】スクリプト バトルロワイヤル45【pl,rb,php,js】
http://peace.2ch.net/test/read.cgi/tech/1405874605/670-680
2014/08/31(日) 04:44:55.96ID:igojaLD4
>>148
こいつら夢と理想を語ってる時点で1の妄言と大差ないわ。
2014/08/31(日) 04:46:10.77ID:igojaLD4
夢と理想を描くくらいなら一昔前の俺のレベル。
156
垢版 |
2014/09/03(水) 19:05:09.17ID:pp7cuLBa
結局、関数型言語って何がいいのかいまいちわからんな。
もうちょっと修行が必要か。。。
2014/09/03(水) 19:21:58.87ID:0ir9kNKt
関数型の良さは手続き型でなく、計算順序(手続き)がなく、副作用がないところ。
(実際は計算時間が掛かるけれど)入力に対し瞬時に応答が返るというイメージ。
158
垢版 |
2014/09/03(水) 20:06:29.19ID:pp7cuLBa
副作用がないってのが今一信用できないんだよなぁ
デカいオブジェクトの一部を更新しようとしたら丸コピーするんでしょ?
まあ、ハードが進歩したらどうなるかわからんが、
副作用なしで十分速いコードを書くのは難しくない?
2014/09/03(水) 20:49:03.08ID:z1Y/3x7f
>>158
>デカいオブジェクトの一部を更新しようとしたら丸コピーするんでしょ?

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

ただし副作用のない世界におけるデータ構造に関する
効率的な実装アルゴリズムは発展途上にある
(世の中の歴史的なアルゴリズムの大半は副作用を前提にしているからね)
たとえばこんなのが分かりやすいと思う
・20分でわかる Purely Functional Data Structures - Kmonos.net
 http://www.kmonos.net/pub/Presen/PFDS.pdf
2014/09/03(水) 20:52:47.28ID:gtOXQwRF
>>158
そこは CopyOnWrite とかの実装でなんとかなるでしょ
て言うか、一部を更新と言うのがそもそも違うような気がするが
161
垢版 |
2014/09/03(水) 21:07:05.78ID:pp7cuLBa
>>159
これ考えたやつすげーな。
素直に感心するわ。
2014/09/04(木) 12:51:46.22ID:Azi8pMDh
クリス・オカサキさんはsimonpjとかに並ぶ神レベルの御方のひとり。
2014/09/05(金) 06:58:20.44ID:vJ702ivD
>>157
ハア?ナニイッテンノ?
関数型にも計算順序はあるぞ。評価戦略という名前で。
2014/09/05(金) 09:55:29.84ID:qmuQRxyX
正確には、結果が得られるとしたら計算順序によらない(チャーチ=ロッサ性)だな。
1651
垢版 |
2014/09/05(金) 19:53:29.10ID:Y4VtbNiL
ちなみに>>159が言ってるデカいオブジェクトの一部を更新するとき
丸コピーしないレベルの最適化を実現してるコンパイラって現段階であるの?
あるんなら触ってみたい。Ocamlでなくていいから。
2014/09/05(金) 20:18:53.62ID:qmuQRxyX
リンク先のPDFをよく読んだか?

コンパイラがやってくれるという話じゃなくて、そういうようにデータ構造を設計する、
という話だから(ある程度はHaskellコンパイラの最適化のおかげも入ってるけど)。
167
垢版 |
2014/09/05(金) 20:50:15.22ID:Y4VtbNiL
自力で実装するのか。
参照透過性を保つのはしんどそうだな。
2014/09/05(金) 21:21:29.17ID:Ne6tWzRJ
関数型言語を、参照透過性がないC言語で実装可能だし、
C言語ソースコードにコンバートすることも可能。
実行時の中身の動作は関係がない。
169
垢版 |
2014/09/05(金) 21:38:10.90ID:Y4VtbNiL
>>168
よくわからんが論理的にそういうこともできるって話ならあんまりありがたみがないなあ。
実装がどれだけ楽かってのは俺にとって重要な話だ。
やっぱりそこはコンパイラに頑張ってほしいね。
2014/09/05(金) 21:46:10.50ID:Ne6tWzRJ
参照透過性はハードウェアの物理的な制約でない。
現状、普及しているパソコンもノイマン型、手続き型でアセンブラ・機械語で動作している。
ハードウェアまでが完全に関数型として動くわけでない。
171
垢版 |
2014/09/05(金) 22:11:28.48ID:Y4VtbNiL
物理的な制約ではないったって、参照透過性をノイマン型コンピュータで
効率よく実装できないんならそれは物理的な制約みたいなもんでしょ。
丸コピーに勝る最適化が実装されないと、信用できないなぁ。
2014/09/05(金) 22:11:40.10ID:u2C0iLEX
>>169
>>1 には初耳かもしれないけど、リストというデータ構造がある
リストの実装方法はいくつかあるけど、
世の中で関数型を名乗る言語のコンパイラのほぼすべてにおける
リストに対する構成(cons)と分解(decons)といった操作は、
大昔から「丸コピーしないレベルの最適化」が実現されている
もちろん OCaml でもリスト操作で丸コピーは発生しない

す ご い だ ろ ?
2014/09/05(金) 22:27:04.06ID:vJ702ivD
>>172
へー、consセルのcarに破壊代入するかわりに
cdrをコピーせずに新しいcarだけを追加するのかい?

そりゃすごいねえ
2014/09/05(金) 23:09:43.43ID:rtobVFDF
>>173
リストの丸コピーの定義書いてみ
まあ、まともな精神なら恥ずかしくて書けないだろうけどな w
2014/09/06(土) 09:24:36.23ID:2eQ4pr9G
>>174
consセルの丸コピーの定義書いてみ
自分の馬鹿さが明らかになって恥ずかしすぎて書けないだろうけどなw
2014/09/06(土) 09:26:57.68ID:2eQ4pr9G
つーかconsセルに破壊代入する関数型言語なんて腐る程あるし
この馬鹿は何を自慢したいのだろう?馬鹿すぎて理解できない
2014/09/06(土) 09:48:13.12ID:VC7+V5v8
>>175
書けないわけね
まあ、そりゃそうだわな w
2014/09/06(土) 19:13:42.33ID:2eQ4pr9G
おー、華麗な勝利宣言だwww




キモ!
2014/09/06(土) 21:11:07.40ID:VC7+V5v8
>>178
キモとしか書けなくて悔しいね w
2014/09/07(日) 08:03:05.89ID:EoKvJO+q
ハスケラって初心者のくせにハスケル知ってるというだけでエラソーしてるけど
あれって宗教か何かなのか?
181
垢版 |
2014/09/07(日) 23:47:31.57ID:9dp9vcbI
関数型言語やりたいならOcamlよりHaskellお勧め?
>>123のコードは副作用ありまくりなんだが。
2014/09/08(月) 07:21:00.89ID:j836SLcH
>>180
ガキにありがちな行動だろ
スルーしとけよ
2014/09/08(月) 11:55:44.86ID:cPc63HcT
関数型言語の中では副作用がある言語のほうが主流だろ。
LISPやSchemeやSMLやOCamlなど。
2014/09/08(月) 12:03:45.51ID:kaEhSBtj
副作用、代入ありは、関数型記述もできる手続き型。
2014/09/08(月) 12:08:09.21ID:uHpNxeFr
純血主義ならhaskellで
2014/09/08(月) 15:22:32.10ID:pVr2+nKJ
関数型言語は使うなと何処かの先生が言ってたぞ。
関数型と言うのは単にプログラミング手法であるから言語なんてつけるなと言うことらしい
2014/09/08(月) 17:26:33.52ID:uHpNxeFr
>>186
kwsk
2014/09/08(月) 18:04:23.92ID:pVr2+nKJ
>>187
関数型プログラミングは本当に難しいのか
http://itpro.nikkeibp.co.jp/article/Watcher/20121001/426555/?ST=smart
『関数型言語』を使ってはいけない」との発言が飛び出したのだ。
2014/09/08(月) 18:23:47.23ID:kaEhSBtj
純粋関数型はプログラマの技法のためでなく
コンパイラ、ハードウェアのためだろ。
プログラマにとっては使いにくいが、
手続き、順序がないことで、機械が並列処理しやすい。
順序があると、先の手続きが終わるまで待たないといけない。
2014/09/08(月) 19:14:00.85ID:cPc63HcT
>>189
逆。
純粋関数型言語はプログラマのための技術だ。
関数型言語の並列化は何十年も昔からの研究テーマだが
未だに実用的な決定打が出ていない。
2014/09/08(月) 19:20:10.71ID:kaEhSBtj
プログラマのためなら、手続き型も使える関数型、関数型もも使える手続き型というハイブリットのほうがよく
厳しい制約をつけることはない。値の書き換え不可能は便利でない。
192
垢版 |
2014/09/08(月) 19:36:06.54ID:ZbTP8aJt
いつの間にか関数型言語スレになってしまったな。
まあ寄り道もいいか。
193
垢版 |
2014/09/08(月) 20:53:29.01ID:ZbTP8aJt
無知をさらすようだけど、チューリングマシンで一回テープに書き込んだらそのメモリは書き換えられないマシンがあったら、それはチューリング完全になる?
2014/09/08(月) 21:12:35.82ID:0BEKcfFo
直感的には、規則は面倒になりそうだけど「テープはいくらでもある」というのが
チューリングマシンの前提だから、問題ないんじゃない?
195
垢版 |
2014/09/08(月) 21:17:06.30ID:ZbTP8aJt
直感的にはそうなんだけど、じゃあ一回しかメモリに書き込めないマシンでチューリングマシンをシミュレートしてみろって言われると俺には無理。
2014/09/08(月) 21:53:22.17ID:YW1sNfFx
>>186
そういう先生は先生として失格なので無視していい
2014/09/08(月) 23:28:07.41ID:0BEKcfFo
てゆーか、文脈を無視して取り出すな危険、系だろ
2014/09/08(月) 23:46:25.48ID:nnXcaq6b
>>180
ナゼ突然に Haskell という名前を出すのか意味不明だなぁ
不変オブジェクトによる計算は、ML や Lisp のように破壊的代入が可能な
不純関数型言語でも重要な概念であり、基本のプログラミング・スタイルだよ
特に>>159のプレゼン内で紹介されているオカサキ氏の書籍では、
すべてのコードが Standard ML で書かれているのに、いったい何を言いたいのだろう?

おそらく>>180の頭の中には「関数型言語 == Haskell」という等式が
あるんだと思うけど、>>180のようにあらゆる関数型言語がHaskellに見えてしまう
ニワカな自称Haskellプログラマを指して「ハスケラ」と呼ぶんだがね
2014/09/08(月) 23:54:48.92ID:nnXcaq6b
>>186,188
ソースが 日経ITpro だろ
ここは以前(2006年)にも「本物のプログラマはHaskellを使う」という煽り記事を書いて、
記事に踊らされた糞ハスケラを量産した張本人だよ
そして今度(2014年)は「『関数型言語』を使ってはいけない」とは、
その変わり身の速さに大笑いするね

>>186,188が、またITに無知なマスゴミ記事に踊らされたいのかい?
日経新聞の中国賞賛記事に煽られて進出した日本企業のように....
2014/09/09(火) 05:57:09.86ID:ukX/qMIS
単に172みたいなシッタカはハスケラが多いという経験則なんじゃね?
実際、シッタカ多いだろ、ハスケラ界隈。
2014/09/09(火) 06:01:06.48ID:ukX/qMIS
つーか、158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている。
それをいちいち関数型特有の技術であるかのように言いふらすのか。
ルビ厨と同類だなw
2014/09/09(火) 10:33:24.25ID:iSgMgqSE
> 実際、シッタカ多いだろ、ハスケラ界隈。

うん。カタカナで書く奴とか、>>199 のように、長期連載記事を全くそれと認識できてない
ほどのニワカだということを自分で自慢して自爆しちゃう奴とか。
2014/09/09(火) 14:38:16.53ID:ukX/qMIS
>>199と、「本物のプログラマは…」が長期連載記事であることは全く矛盾しないけど、
どうして>>202は199は長期連載と認識していないと思い込んじゃったのかな?
エスパーですか?
2014/09/09(火) 23:09:21.92ID:u4pMEKRn
>>201
ほう、「>>158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている」のか、それは知らなんだ

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

一方、手続き型言語で基本的なデータ構造といえばレコード(=構造体)と配列だと思うけど、
>>201の住んでいる異次元世界では、レコードや配列が永続データ構造で実装されているんだね
興味深い話だから、ぜひ kwsk 説明してもらえると嬉しいなあ....(棒
2014/09/09(火) 23:32:43.42ID:iSgMgqSE
見事に知ったかが消えたな
2014/09/10(水) 07:01:46.89ID:nz1QrfPP
>>204
知らないって、幸せなことなんだなあw
ある言語で永続データ構造が使えるからといって、
その言語の全てのデータ型が永続データ構造で実現されていることにはならないことぐらい
中学生レベルの論理を知っていればわかりそうなものなんだけどなあw

copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて
そこにはLISPで培われた永続データ構造の技術が使われてるよ。
2014/09/10(水) 11:12:44.60ID:2lSvEqyn
どんどん言ってることがズレてくな
2014/09/10(水) 11:51:44.84ID:2N2PVK/b
関数ムラの住民は世間が狭いね
2014/09/10(水) 22:45:00.45ID:MIzNsnl2
>>204
> copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて

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

関数型言語で「ふつうに」リスト操作している(>>172)のと同様に
手続き型でも永続データ構造が使われているとは、
>>206のいる異次元世界はプログラマにとって理想郷だね!!(棒
210桃白白 ◆9Jro6YFwm650
垢版 |
2014/09/10(水) 22:56:17.03ID:6zdXUVOl
>>209
Stringとか
2014/09/10(水) 23:05:15.07ID:MIzNsnl2
>>210
String は単純型だからデータ構造やライブラリには含まれない
もし String を含めるのなら Integer もデータ構造の一種になってしまう
212桃白白 ◆9Jro6YFwm650
垢版 |
2014/09/10(水) 23:08:58.07ID:6zdXUVOl
>>211
単純型ってなんすか?
BigIntとか
2014/09/10(水) 23:20:47.47ID:MIzNsnl2
>>212
単純型とは、他の型から構成されることのないデータ型であり、
文字列型の他には、論理型、文字型、列挙型、数値型がある
関数型言語の Lisp や論理型言語の Prolog だとアトムとも呼ばれる
214桃白白 ◆9Jro6YFwm650
垢版 |
2014/09/10(水) 23:22:03.29ID:6zdXUVOl
>>213
他の型から構成されることがないってどういう意味っすか?
2014/09/10(水) 23:32:19.53ID:MIzNsnl2
>>214
たとえばレコード型(C言語であれば構造体)は、
単純型、配列型、別のレコード型といった「他の(複数の)型から構成」される
また配列型も整数型、文字型、レコード型といった「他の型(の反復)から構成」される
そしてレコード型や配列型は、要素となった他の型に分解できる

それに対して、単純型は「他の型から構成されることがない」
言い換えると、単純型は(他の型へ)分解できない根源的なデータ型になる
>>213で書いたアトムも、物理学の(分解できない)原子が語源になっている
2014/09/10(水) 23:45:56.12ID:ADC46RWM
単純型‥もう、アーキュムレータとかその他レジスタに載る型、ということにしては?
2014/09/11(木) 06:06:05.80ID:/5wQig/e
>>211
Stringが内部データ構造を持っていたりライブラリで提供されている言語や処理系なんて山ほどあるだろ。
StringがCharのリストとして実現されている言語や処理系も多い。
関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw
2014/09/11(木) 10:27:37.46ID:ZRdF18oF
>>217
関数型でもCharのリストで扱う言語あった気が
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況