MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
そろそろ日本語の情報が充実してきそうなこの言語について、幅広く語れ。
http://www.fsharp.net/
前スレ
【.NET】F#について語れ【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1186030985/
関連スレなどは >>2-
【.NET】F#について語れ2【OCAML】
レス数が1000を超えています。これ以上書き込みはできません。
2011/05/01(日) 02:46:49.52
948デフォルトの名無しさん
2019/03/23(土) 00:41:02.20ID:hURiHGZc 関数型言語が流行るときは果たして来るのかな?
2010年くらいまでは、cpuとgpuがまもなく統合されて、命令的でなく、宣言的にかける関数型言語でかくことでプログラムの並列化が自動的になされる時代が来るとかいう謳い文句をよく耳にした。
でも現実は関数型言語で並列プログラミングをしている人は少なくて、directx12とかvulkanの登場に象徴されるように、並列化したければ、寧ろもっと命令的でstate machineを操作するようなスタイルが主流になってしまった。
2010年くらいまでは、cpuとgpuがまもなく統合されて、命令的でなく、宣言的にかける関数型言語でかくことでプログラムの並列化が自動的になされる時代が来るとかいう謳い文句をよく耳にした。
でも現実は関数型言語で並列プログラミングをしている人は少なくて、directx12とかvulkanの登場に象徴されるように、並列化したければ、寧ろもっと命令的でstate machineを操作するようなスタイルが主流になってしまった。
949デフォルトの名無しさん
2019/03/23(土) 00:54:03.50ID:ZwxIeQAv いやDirectX とか引き合いに出されても、それが普通の並列のケースかいったらちがくね?
950デフォルトの名無しさん
2019/03/23(土) 00:54:13.93ID:hURiHGZc コンピュテーション式を使って、async{}の内部では文を特別に解釈することで、簡単に非同期処理をすることができるというのはF#の優れた点だと思う。
けれど、AsyncなんかはC#とか色々な言語に取り込まれつつある。
折角頑張って本を読んで、F#を使ってはみたが、クラスを作らなくてよい、代数的演算ができるようになったC#という程度の使い方しかできない。
コンピュテーション式は俺には使いこなせる気がしない。プログラミング言語を使うことそれ自体が目的みたいな人なら使えるかもしれないが。このスレッドをざっと見てみたけれど、殆どのF#でコンピュテーション式とかそういう機能使う人いないんじゃないかな。
けれど、AsyncなんかはC#とか色々な言語に取り込まれつつある。
折角頑張って本を読んで、F#を使ってはみたが、クラスを作らなくてよい、代数的演算ができるようになったC#という程度の使い方しかできない。
コンピュテーション式は俺には使いこなせる気がしない。プログラミング言語を使うことそれ自体が目的みたいな人なら使えるかもしれないが。このスレッドをざっと見てみたけれど、殆どのF#でコンピュテーション式とかそういう機能使う人いないんじゃないかな。
951デフォルトの名無しさん
2019/03/23(土) 00:59:32.27ID:hURiHGZc 結局俺が言いたいのは、2010年くらいまでによく聞いた関数型言語の宣伝文句は大げさ過ぎだったということだ。
952デフォルトの名無しさん
2019/03/23(土) 01:06:26.22ID:hURiHGZc >>949
普通のケースではないけれど、当時はゲームエンジンの制作者までもが関数型言語に期待しているような記事があったんだよ。ゲームにまでも関数型言語か! これは関数型言語をやらざるを得ないな!って思ったことを覚えている。
https://game.watch.impress.co.jp/docs/20080911/epic.htm
普通のケースではないけれど、当時はゲームエンジンの制作者までもが関数型言語に期待しているような記事があったんだよ。ゲームにまでも関数型言語か! これは関数型言語をやらざるを得ないな!って思ったことを覚えている。
https://game.watch.impress.co.jp/docs/20080911/epic.htm
953デフォルトの名無しさん
2019/03/23(土) 01:21:43.24ID:ZwxIeQAv よく分からないんだが、自分が使いこなせない?のかよく分からなかったという理由で誰も使ってないと思うのはなんなの?
WEBでもReactとかまさに関数型の考えでできてるしElmはピュアだし、いろんな言語に関数型の要素取り入れられてる
シェーダーとかまさに関数だし、ゆにていのECSとかオブジェクト指向で色々効率悪かったから値の配列を元に処理するぜって話だし、Rx系もいろんなところに移植されてる。
むしろ色んなところで関数型の考えで応用されてると思うけど。
WEBでもReactとかまさに関数型の考えでできてるしElmはピュアだし、いろんな言語に関数型の要素取り入れられてる
シェーダーとかまさに関数だし、ゆにていのECSとかオブジェクト指向で色々効率悪かったから値の配列を元に処理するぜって話だし、Rx系もいろんなところに移植されてる。
むしろ色んなところで関数型の考えで応用されてると思うけど。
954デフォルトの名無しさん
2019/03/23(土) 01:30:39.33ID:XiFmcVOc デザパタとかほとんど不要になったしな
955デフォルトの名無しさん
2019/03/23(土) 04:56:56.13ID:abrpiqJH >>948
・ユーザーは同じ操作をすれば同じ結果が返ってくるソフトを求めてる(ある種の参照透明性のあるソフトを求めてると言える)
・しかし手続き型言語は参照透明性が保たれない。
この時点で論理矛盾は有るんだけど、流行らないでしょうね。。。ー>関数型言語
・ユーザーは同じ操作をすれば同じ結果が返ってくるソフトを求めてる(ある種の参照透明性のあるソフトを求めてると言える)
・しかし手続き型言語は参照透明性が保たれない。
この時点で論理矛盾は有るんだけど、流行らないでしょうね。。。ー>関数型言語
956デフォルトの名無しさん
2019/03/23(土) 05:05:32.95ID:abrpiqJH >>952
覚えてますよー。
恐らく並列用のライブラリ充実で手続き型言語で良いやってなったんでしょうね。
シングルスレッドは手続き型言語優位ですし、並列ライブラリ揃えばパフォーマンスは手続き型言語に軍配上がりますから。
覚えてますよー。
恐らく並列用のライブラリ充実で手続き型言語で良いやってなったんでしょうね。
シングルスレッドは手続き型言語優位ですし、並列ライブラリ揃えばパフォーマンスは手続き型言語に軍配上がりますから。
957デフォルトの名無しさん
2019/03/23(土) 05:11:15.99ID:abrpiqJH ちなみにHaskellは純粋関数型言語という事で並列に向くのではと思われましたが、純粋さの為に遅延評価だったのが災いしてます。
(遅延評価が並列動作を徹底的に邪魔をする)
実用的には金融系で採用されたOCamlのように純粋でない関数型言語の方が並列に向いているようです。
(並列プログラミングでよく名前の上がるErlangも純粋じゃないですよね)
(遅延評価が並列動作を徹底的に邪魔をする)
実用的には金融系で採用されたOCamlのように純粋でない関数型言語の方が並列に向いているようです。
(並列プログラミングでよく名前の上がるErlangも純粋じゃないですよね)
958デフォルトの名無しさん
2019/03/23(土) 11:44:18.54ID:XiFmcVOc 遅延評価と純粋性がごっちゃになっておる
959デフォルトの名無しさん
2019/03/23(土) 12:37:37.78ID:sbmZIzZ6 俺純粋なんだけど、あの子は振り向いてくれない
みたいなもんか
みたいなもんか
960デフォルトの名無しさん
2019/03/23(土) 12:43:08.27ID:2PKt7E3M961デフォルトの名無しさん
2019/03/23(土) 14:19:44.65ID:ZwxIeQAv Haskellが遅延デフォなのは副作用を外に持ってた関係?
その辺よく知らんけど純粋と遅延は一体じゃないでしょ
関数型はパフォーマンスではそりゃゴリゴリメモリ書き換えるやつの方が速いかも知れんが、そりゃメンテ性とか色々一切無視したあまりにも乱暴な議論じゃねーの。
重ねていうけどいろんな言語に関数型の概念は染み渡ってて、それで関数型が流行らないとか言われてもむしろすでに乗っ取られてはしませんかって感じしかしないわ。
そもそも関数型も手続き型も各々得手不得手あるんだからどっちが勝った負けたの話じゃない
その辺よく知らんけど純粋と遅延は一体じゃないでしょ
関数型はパフォーマンスではそりゃゴリゴリメモリ書き換えるやつの方が速いかも知れんが、そりゃメンテ性とか色々一切無視したあまりにも乱暴な議論じゃねーの。
重ねていうけどいろんな言語に関数型の概念は染み渡ってて、それで関数型が流行らないとか言われてもむしろすでに乗っ取られてはしませんかって感じしかしないわ。
そもそも関数型も手続き型も各々得手不得手あるんだからどっちが勝った負けたの話じゃない
962デフォルトの名無しさん
2019/03/24(日) 22:48:09.05ID:cXiULMz0 質問です。2重ループ内で関数Fを呼び出して処理をしようとしているのですが、これをreduceなどを使って簡潔に表現する方法はありますか?
for i in seq1 do
for j in seq 2 do
F(i,j)
for i in seq1 do
for j in seq 2 do
F(i,j)
963デフォルトの名無しさん
2019/03/24(日) 22:56:58.91ID:cXiULMz0 先ほどの訂正:
seq1は2次元のコレクションでseq1の各要素を引数にしてとある関数Fを呼び出すということをやりたい。
for i in seq1 do
for j in seq1.[i] do
F(seq1.[i].[j])
seq1は2次元のコレクションでseq1の各要素を引数にしてとある関数Fを呼び出すということをやりたい。
for i in seq1 do
for j in seq1.[i] do
F(seq1.[i].[j])
964デフォルトの名無しさん
2019/03/25(月) 01:12:57.65ID:25q5twYk Haskellしか知らんけど、関数型言語である以上似たようなものがあるはずなので。。。
1・main =print $ [map f (lst!!y) | y <- [0..length lst - 1]
lst = [[1,2,3],[4,5,6]]
f = (+1)
2・main =print $ map (map f) lst
lst = [[1,2,3],[4,5,6]]
f = (+1)
1・main =print $ [map f (lst!!y) | y <- [0..length lst - 1]
lst = [[1,2,3],[4,5,6]]
f = (+1)
2・main =print $ map (map f) lst
lst = [[1,2,3],[4,5,6]]
f = (+1)
965デフォルトの名無しさん
2019/03/25(月) 08:28:31.79ID:X7DYSSdE966デフォルトの名無しさん
2019/03/25(月) 08:35:51.05ID:jf2JIiqx let f = printfn "%d"
let l = [[1;2;3]; [4;5;6]]
let kk = List.collect id l |> List.map f
let l = [[1;2;3]; [4;5;6]]
let kk = List.collect id l |> List.map f
967デフォルトの名無しさん
2019/03/25(月) 08:36:41.76ID:jf2JIiqx かぶったすまん
iterの方がええね
iterの方がええね
968デフォルトの名無しさん
2019/03/25(月) 13:16:59.54ID:kfX9OJI5 いやmapしたいのだったらそっちで正解かと
969昨日質問したものです
2019/03/25(月) 22:24:43.80ID:8XT7Qy8P970デフォルトの名無しさん
2019/03/25(月) 22:50:11.46ID:X7DYSSdE 気分かなー
上からパイプライン演算子で繋がってない時はiterの代わりにfor使うことも
上からパイプライン演算子で繋がってない時はiterの代わりにfor使うことも
971デフォルトの名無しさん
2019/03/25(月) 23:12:16.99ID:25q5twYk >>969
うい。
Haskellのlst!!yは普通の言語のlst[y]に置き換えてくれれば。
リスト内包表記でも作れそうだと作ってみましたが、
普段インデックスなんて意識しなかったから、ちょっと悩みました。
最初、こう書いてみたら2次元から1次元になったので違うな。。。と。
(全部に適用するのは同じですが、リスト(配列)の構造(次元)が違ってしまう)
[f (lst!!y!!x) | x <- [0..(length.head) lst - 1], y <- [0..length lst - 1]]
結局map (map f) lstが一番簡潔でしたが。
うい。
Haskellのlst!!yは普通の言語のlst[y]に置き換えてくれれば。
リスト内包表記でも作れそうだと作ってみましたが、
普段インデックスなんて意識しなかったから、ちょっと悩みました。
最初、こう書いてみたら2次元から1次元になったので違うな。。。と。
(全部に適用するのは同じですが、リスト(配列)の構造(次元)が違ってしまう)
[f (lst!!y!!x) | x <- [0..(length.head) lst - 1], y <- [0..length lst - 1]]
結局map (map f) lstが一番簡潔でしたが。
972デフォルトの名無しさん
2019/03/25(月) 23:18:05.28ID:4CvSxgZ7 F#良く知らないけど内包表記で
[ for xs in xss do
for x in xs -> f(x)]
みたく書けないん?
[ for xs in xss do
for x in xs -> f(x)]
みたく書けないん?
973デフォルトの名無しさん
2019/03/25(月) 23:33:50.20ID:tiUbxLb+ >>970
変に関数型にこだわるより簡潔に書ける方を使うということですね。
変に関数型にこだわるより簡潔に書ける方を使うということですね。
974デフォルトの名無しさん
2019/03/25(月) 23:44:59.82ID:tiUbxLb+975デフォルトの名無しさん
2019/03/25(月) 23:55:50.61ID:25q5twYk976デフォルトの名無しさん
2019/03/25(月) 23:57:10.44ID:X7DYSSdE >>974
オペレーター書けば出来るとおも
オペレーター書けば出来るとおも
977デフォルトの名無しさん
2019/04/05(金) 14:57:42.01 Microsoft makes F# 4.6 and F# tools for Visual Studio 2019 generally available
978デフォルトの名無しさん
2019/06/18(火) 06:24:44.70ID:3nOE2mBA プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
979デフォルトの名無しさん
2019/07/09(火) 22:26:17.25ID:kWuXjUR9 F#の公式リファレンス
たとえばList.splitAtが
左側のメニューにはあるけど一覧表のほうには無かったり
色々不備がある、コアライブラリの漏れの無い完全なリファレンスってどうやったら得られる?
https://msdn.microsoft.com/visualfsharpdocs/conceptual/collections.list-module-[fsharp]
たとえばList.splitAtが
左側のメニューにはあるけど一覧表のほうには無かったり
色々不備がある、コアライブラリの漏れの無い完全なリファレンスってどうやったら得られる?
https://msdn.microsoft.com/visualfsharpdocs/conceptual/collections.list-module-[fsharp]
980デフォルトの名無しさん
2019/07/09(火) 23:29:34.93ID:U1XlPShk ソースみたほうが早いやろ
981デフォルトの名無しさん
2019/07/10(水) 07:48:30.66ID:EfQjHn3o >>979
インテリセンス?
インテリセンス?
982デフォルトの名無しさん
2019/07/10(水) 10:27:08.20ID:+uFplCdI バージョンアップされたり
パッチ出るたびに
毎回ソース見直すのか
ご苦労さん
パッチ出るたびに
毎回ソース見直すのか
ご苦労さん
983デフォルトの名無しさん
2019/07/10(水) 14:49:37.18ID:EZXNCWT9984デフォルトの名無しさん
2019/07/13(土) 03:11:40.87ID:zvKgDhky985デフォルトの名無しさん
2019/07/13(土) 05:05:29.01ID:mpn46/bq スレたて以降8年もたってるのに全然流行ってる気配ないぞ
986デフォルトの名無しさん
2019/07/13(土) 08:18:43.51ID:P22ZcnQZ まあはやってはないしな実際
C#なんかより遥かにマシなんだけどね
C#なんかより遥かにマシなんだけどね
987デフォルトの名無しさん
2019/08/05(月) 22:08:11.43ID:vL6RMqM2 ましって何が?
988デフォルトの名無しさん
2019/08/06(火) 00:15:19.73ID:NYI2fH1q 言語としてまし
989デフォルトの名無しさん
2019/08/17(土) 16:38:45.86ID:I00lwTWg んじゃ、言語ましましで
990デフォルトの名無しさん
2019/08/19(月) 08:46:52.63ID:xlQPwL5+ C#とF#で「F#のほうがマシ」と言われる理由が分からん。
C#とF#が違う点って「書き方」だけだよね(どちらもCLIに落とされたら同じ)。
書き方で「マシ」「マシじゃないない」の議論するってもはや言語関係ないじゃん。
C#とF#が違う点って「書き方」だけだよね(どちらもCLIに落とされたら同じ)。
書き方で「マシ」「マシじゃないない」の議論するってもはや言語関係ないじゃん。
991デフォルトの名無しさん
2019/08/19(月) 10:40:41.65ID:2nNI8r3o インライン強制あたりはC#では実現できないILの産み方するんでは?
あとは単位つけれるアレとか。コンパイル時後は消えるけど、書き方の問題だけではなくて実際にコンパイルエラーを起こしてくれる賢い機能だと思うけど。
あとなんだろ。スタックに変数確保がとても楽とかかな。最近やっとc#でも出来るようになったけど、まだまだ不便よね。
あとは単位つけれるアレとか。コンパイル時後は消えるけど、書き方の問題だけではなくて実際にコンパイルエラーを起こしてくれる賢い機能だと思うけど。
あとなんだろ。スタックに変数確保がとても楽とかかな。最近やっとc#でも出来るようになったけど、まだまだ不便よね。
992デフォルトの名無しさん
2019/08/19(月) 23:18:21.85ID:3NQ2ueMV993デフォルトの名無しさん
2019/08/20(火) 11:42:16.19ID:zlJnj2O9 >C#とF#が違う点って「書き方」だけだよね(どちらもCLIに落とされたら同じ)。
機械語になったら同じ(少なくとも同じCPUで実行してれば)だから
PHP の方が Ruby よりましだな
機械語になったら同じ(少なくとも同じCPUで実行してれば)だから
PHP の方が Ruby よりましだな
994デフォルトの名無しさん
2019/08/20(火) 12:38:36.66ID:oQBfOkeC >>992
キャプチャされないlet mutableはスタック上に確保される
キャプチャされないlet mutableはスタック上に確保される
995デフォルトの名無しさん
2019/08/20(火) 13:38:14.98ID:FzyuHnSO >>994
それは値型参照型問わず?
それは値型参照型問わず?
996デフォルトの名無しさん
2019/08/20(火) 13:47:24.56ID:zlJnj2O9 わず
997デフォルトの名無しさん
2019/08/20(火) 15:50:26.07ID:FzyuHnSO998デフォルトの名無しさん
2019/08/23(金) 12:59:41.19ID:v46Wsp12999デフォルトの名無しさん
2019/08/23(金) 15:07:25.79ID:Zx6EO+xk 次スレ無しでOK
1000デフォルトの名無しさん
2019/08/24(土) 05:21:57.38ID:JleCqbx3Slot
🎴👻👻
🎰💣🌸
🌸🍒🎰
(LA: 0.90, 0.83, 0.75)
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 3037日 2時間 35分 8秒
新しいスレッドを立ててください。
life time: 3037日 2時間 35分 8秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★6 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★2 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 中国「次に禁止してほしいものを教えて」 [358382861]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 【総裁選】記者「進次郎メモ見過ぎ」高市早苗「w」小泉進次郎「責任ある者は適切な慎重さを備えるべき」 [175344491]
- 【速報】中国、水産物輸入停止★3 [989870298]
- 山上被告の妹「母を変えた統一教会のせいだ」「払えと言ってきて腹が立った」涙ながらに証言【安倍元総理銃撃事件😲 [861717324]
