【.NET】F#について語れ2【OCAML】
レス数が900を超えています。1000を超えると表示できなくなるよ。
MSResearchから出てきた.NETで使える関数型言語のひとつF#
OCAMLの流れを汲むこの言語、いろいろと面白そうなことができそう。
そろそろ日本語の情報が充実してきそうなこの言語について、幅広く語れ。
http://www.fsharp.net/
前スレ
【.NET】F#について語れ【OCAML】
http://hibari.2ch.net/test/read.cgi/tech/1186030985/
関連スレなどは >>2- トップクラスは仕事で何やってんのかとF#で型クラスを導入するには今のCLR上のどこに問題があるのか教えてくれ。 自分も心待ちにしてる。
なんか遠く無いうちに8.1ストアアプリとかディスコンになりそうだしその前に使えるようにしてくれないと困るわ Console.ReadLine() |> intを何度も書くのが面倒で、
let CRI () =
Console.ReadLine() |> int
let m = CRI
let n = m + 1
としても、mがintではなくunit->intになってしまって上手くいきません。どうしたらいいんでしょうか。 >>838
CRIの型はunit->int
つまり () をうけとってint型を返す関数
let m = CRI () ってすればいい
let m = CRI とするとmがCRIって関数のコピーになるから
let n = m () + 1 としてもいい let CRI () = の()は、引数を取らない関数という意味じゃなくて、()を引数として
取る関数という意味だったんですね。
mが関数のコピーになってしまっていることは何となくわかっていましたが、
どうしたらいいかわかりませんでした。
色々まとめて関数化する入口になりました。ありがとうございます。 C#でwinフォームのフォント変えてた時には意識してなかったけど
F#におこられてMSDN見たら
public Font(
FontFamily family,
float emSize
)
あれfloatだったんかw 最初のエラーメッセージ一つつぶしてはリコンパイルしてまた怒られる繰り返しで
エラーも警告も全部潰し終わればだいたい思った通り動くものができてて
ある意味楽だよね C#とかだろ
まあ自分もコンパイル通ったら思い通りに動いたってのは何度も経験した コンパイル通ったら思い通りに動いたって経験ないので設計力が俺にない まー漏れはGUIデバッグ用おまじないとして
let msgbox s = MessageBox.Show( s ) |> ignore
なんてのを毎回コピペしてるんだけどねw 「ゆるふわ」な展開だよな
oO(だってデバッグでコンパイル警告増やしてる場合じゃないもん
ということで>>847をそっとクリップボードに入れたとかは言えない) ビルドツール2015が落とせなくなってると思ったら
最新のビルドツール(現在は2017)だけ無償提供するけど
過去のはMSDNサブスクリプション限定になったんかよ 環境作っちゃったからwそれに趣味だし
もし他人から環境作り聞かれることがあったらVSすすめるけど(質問攻めやだし) ファイルにクラスとかコレクションの値を書き込んだ後に、それを読み込むのに、
一般的な方法ってありませんか?
type Point = {mutable x : int; mutable y : int}
こういう定義があって、今はアドホックでこんな感じに書いてます。
0,0;0,1;0,2;0,3;0,4;0,5;
0,1;1,1;2,1;3,1;4,1;5,1;
これをSplitでString[]にして、
static member fromCSV(s:string) =
match s.Split[|','|] with
| [|a;b|] -> {x = int a; y = int b}
で読んでます。ダサいです。
このtype自体にはこだわりがないので、
[|[|0;1|];[|0;2|];[|0;3|];[|0;4|];[|0;5|]|]
[|[|1;0|];[|2;0|];[|3;0|];[|4;0|];[|5;0|]|]
みたいにデータ構造をそのままぱぱっと書き出して、ぱぱっと読める
みたいな方法はありませんでしょうか。 BinaryFormatter使えばいいんでない?
テキストではなくなるけど びっくりするほどF#の話題ないね
言語人気ランキングだと関数型の中では
Scalaについで上位なんだけど 言語のバージョンアップも大してないしな
まあ自分はコンピュテーション式の組み立てとかも適当にしかできないので猿でもわかるコンプ式とか誰か上げてくれ >>858
Scalaも大して話題ないし
あとはjavaと.netの差 Scalaは言語として色々とんがってるから言語マニアを引きつけるのと、比較対象となるJAVAがアレなところが。
C#も色々アレなとこはあるけどモダンな言語機能も取り込んでるしJavaよりは遥かにマシだからな ScalaはJavaの後継を目指しているけど
F#はC#を補完する存在だから
Scalaほど話題にならないっていうのはあるかも F#の言語仕様にそんな大きな不満はないんだけど
やっぱScalaはJava陣営ってのが大きいだろうな
Androidがデファクトだから将来性がある OCamlに無いから採用してないんだろうけど、implicitな型変換は正直ほしい それは設計思想的にないだろうし、自分はない方がいいかな
まあ気持ちはわかる VS2015でF#4.1にしたいんだがF#だけ更新するやり方わからん
VS2017にするのが一番速いのかね? >>872
三笑亭可楽の名前の由来は
山椒は小粒でもピリリと辛い からきてるんだよ 豆な
ちなみに可楽は落語の始祖みたいな人 >>870
Use F# on Windows | The F# Software Foundation
http://fsharp.org/use/windows/
の
Option 4: Install the free F# compiler and tools alone
のとこの
.Install the free F# 4.1 Compiler SDK from Microsoft
これ? どこにってそこにある
それほど減ってない
pythonが食ってるのはphperなんだろううけど
それだけじゃこんなに増えないから全体のπも大きくなってるんか 勉強するのに適当なサンプルコードあるとこ知らない?
例えば↓みたいなのが見たい
・関数型の参考になる
・副作用のコード
ファイルIO
フォーム
・クラス >>2にある通りだがF# Snippetsもいいと思うよ
関数型で副作用とかモナド信者が飛んできそうだが、そこはF#だから問題ないさ >>870
Thx F# Snippets見てみる そもそもここの奴らどのバージョン使ってるかもわからん
普通に最新版使ってんの? モナド信者が筋斗雲のように飛んで来るように
F#ってそんなに注目されてるのかね 男ならF#2.0だろとかいい出す頭おかしいやついそう >>882
諸事情で3。3.3.0.1あたりかな。 実践F# 関数型プログラミング入門 読んでると
リストに気合入ってるんだけど
リストってLIFOじゃないですか
リストのコレクションとしての意味とかループとしての意味は分かるんですけど
LIFOの性質をこれまであんま使った記憶が無くて
その意味合いが分かんないんですよ
自分の中ではFIFOの方が使い勝手よさそうなのに、
あえてLIFOで実装された理由というかメリットが知りたいッス 由来は知らんけど、追加は効率いいよね。
パターンマッチもいいかなと思ったけどそれは配列なら似たようなもんか。 immutableなFIFOリストの実装が非効率的だからでは
FIFOを効率的に実装するためにはリスト末尾と先頭への参照を持つ必要があって
複数箇所から参照されてる場合にそれぞれを破壊的変更する必要がありそう 事前に断っておくと、F#ではプログラミング初心者というか、つい先日からです
>>887 >>888
うん。なんとなくだけど実装上のメリットなら分からないでもないんだけど
結果として使いづらくなるのなら言語としてどうかなと
ちなみに、リストとかどういうケースで使ってますか?
やっぱ、あまり使わないですか? >>889
いや基本リスト使うけど。
中グルングルン回して何かする奴は配列の方が早いので必要な時は配列にする。 コレクション、そも順序気にしないものも多いし。順序が必要な時は適宜rev入れたりして気を配ったりする必要はある。 >>890 >>891
おおっ Thx
なんとなく、納得しました 差し当たって気にし過ぎたのかなw
やっぱ、最初のうちは とにかく書くだね >>886
自己レスなんだけど リストがLIFOの理由が分かった
結構単純な理由なんだけど
F#を含む関数型の場合、データー構造も再帰で表現できるんだけど
リストも再帰で表現されているため、LIFOにしか出来ない
マトリョーシカで例えると、最初のデータが一番小さいマトリョーシカしかで、
追加する度に大きなマトリョーシカに包含となる
結果として、データを取り出す際には大きなまとりょから取り出すことになり、LIFOにしかならないと
Haskellの本読んでて気づいた ちなみに、すごいH本読むと配列って記述無いんだよね
関数型と配列は相性が悪いらしい 不変じゃないしね
Haskellの配列はモナドらしい さらにO(1)でないらしい 純粋だね〜 Lisp から入る人が多いから、自明だと思われているのでは? 演算子の優先順位(↓の一番下にある)の見方なんだけど
https://msdn.microsoft.com/ja-jp/library/dd233228(v=vs.120).aspx
| (パイプ) は|>のこと
f x (関数適用) は関数fの引数の割り当て f 1+2は (f 1)+2という意味
f(x) は.Netの関数の適用
でOKですか?
あと、関数の合成(>>)に関する規定が無いように見えるんですけど、どれに対応しますか? なんのこと言ってるのかなと思ったけど
>>895のリンクの最上部を見るんだ 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
C6RTQ vs2017 communityでwpf/xamlでエラーが出る
未対応なのか? >>893
Haskellの場合、リストを2つ使ってFIFOに変換する
1つはFIFOに変換したリスト もう一つは蓄えようのリスト
FIFOのデータが欲しかったら、蓄え用のリストからデータを順次取り出しFIFO用のリストに保存
FIFO用のリストを使い切ったら、また、蓄えようのリストからFIFOのリストに変換
つまり、裏(LIFO)の裏は表(FIFO) って使い方 さしあたって、MSがF#を忘れていなかったのがうれしいw
Haskell勉強中 now Match!は地味にいいな
後将来的な予定の匿名レコードはC#の匿名クラス的な使い方でそれがメソッド内超えて使えるようになる感じか? MSの割にはアンチが少ないよな
相手にされてないとも >>863>>864
Scalaのスレはなくなりここは残った scalaが思ったより早く廃れたのはそれこそjavaの混乱のせいか
いやもっと前?
F#はなんだかんでMSが見捨ててないからな〜 Scalaは流行り廃り激しいWeb系としてもてはやされたから急におとなしくなった感はある
今は固定層だけ使ってるんじゃね
F#は特に流行ってないから廃れた感じもないw 俺は、Haskellずーーーーと勉強してる
一見わかりやすそうな文法なんだけど、難しいな これ
ただ、知識欲は満たされる 正直C#に公式でOptionとEitherと末尾再帰最適化と諸々のイミュータブルなデータ構造周りを入れてくれればもうそれでいいや ほんそれ
テイルコールはいいから、せめてネスト型数の制限だけなんとかなってくれればなぁ 書き込みあったと思ったらF#の話じゃなくてC#の話じゃんw レス数が900を超えています。1000を超えると表示できなくなるよ。