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】
■ このスレッドは過去ログ倉庫に格納されています
2011/05/01(日) 02:46:49.52
763デフォルトの名無しさん
2016/12/27(火) 16:04:36.71ID:r8OAYz75 勉強し始めたけど、いつなくなるのか心配
MSって、切るときはバッサリ行くよな
MSって、切るときはバッサリ行くよな
764デフォルトの名無しさん
2016/12/27(火) 16:22:15.15ID:ov9/Tp6R もうとっくにイってます
765デフォルトの名無しさん
2017/01/16(月) 12:32:54.03ID:w3fpx7c2 F#デビューしようと思って本探してるんだがC#er向けの本ってないのな
ググるとサイトはいっぱい出てくるけど
こういう場合は関数型言語について書かれた本をとりあえず買っとけばいいのかな
ググるとサイトはいっぱい出てくるけど
こういう場合は関数型言語について書かれた本をとりあえず買っとけばいいのかな
766デフォルトの名無しさん
2017/01/16(月) 13:40:50.81ID:of8fDlu0 Real World Functional Programming: With Examples in F# and C#
かな。たしか英語の原書しかないけど
でもまずプログラミングF#読んだ方がいいと思う
かな。たしか英語の原書しかないけど
でもまずプログラミングF#読んだ方がいいと思う
767デフォルトの名無しさん
2017/01/16(月) 14:05:39.31ID:cZ5PGvSb 俺は実践F#関数型プログラミング入門って本で勉強したけど、なかなか良い本だったよ
書き方が平易な感じでサクサク進められて、基礎的な部分は一通りキッチリ習得できたと思う
書き方が平易な感じでサクサク進められて、基礎的な部分は一通りキッチリ習得できたと思う
768デフォルトの名無しさん
2017/01/16(月) 16:56:59.00ID:rgwnOlnx 勉強中で悪いんだけど
実践F#関数型プログラミング入門は確かにとっつきやすいんだけど
説明不足と思われるところが散見されるように思う
かといってプログラミングF#で十分ってわけではないんだけど
例えば、今アクティブパターン見てるんだけど、いまいち動作がわかんねー
分類としての役割と、型変換の役割があるみたいだけど、
その内部動作っというか、統一的にどのように動作してるのかがわからん
実践F#関数型プログラミング入門は確かにとっつきやすいんだけど
説明不足と思われるところが散見されるように思う
かといってプログラミングF#で十分ってわけではないんだけど
例えば、今アクティブパターン見てるんだけど、いまいち動作がわかんねー
分類としての役割と、型変換の役割があるみたいだけど、
その内部動作っというか、統一的にどのように動作してるのかがわからん
769デフォルトの名無しさん
2017/01/16(月) 21:42:59.51ID:meiXzXMj 実装は関数呼び出しの条件一致だろうけど、使うぶんにはそのパターンになるかどうかって感じでよくないか?
パラメータわたしのやつは順序がおかしくて分かりづらいと思うが
パラメータわたしのやつは順序がおかしくて分かりづらいと思うが
770デフォルトの名無しさん
2017/01/16(月) 21:44:10.62ID:meiXzXMj771デフォルトの名無しさん
2017/01/17(火) 12:28:38.43ID:8zwXc9tZ >>769
以下の=ソース=において、 | FIleExtension ".jpg"はどう動作すると考える?
プログラミングF#には記述があるからわかるけど
普通に ".jpg"はFIleExtensionの引数にしか見えない
疑問点1 match式の|の後はパターンの記述だけど、関数呼び出しの場合の約束事が不明
疑問点2 | FIleExtension ext は.jpgの方とほぼ同じ記述だけど、こちらは代入
さしあたって、切り分けできるのかな? 出来たとしても、わかりずらいし。
=========== ソース ============
let (|FIleExtension|) filepath=Path.GetExtension(filePath)
let determinFIleType(filepath :string)
match filepath with
| FIleExtension ".jpg"->printfn "画像"
| FIleExtension ext->printfn "未知 [%s]" ext
以下の=ソース=において、 | FIleExtension ".jpg"はどう動作すると考える?
プログラミングF#には記述があるからわかるけど
普通に ".jpg"はFIleExtensionの引数にしか見えない
疑問点1 match式の|の後はパターンの記述だけど、関数呼び出しの場合の約束事が不明
疑問点2 | FIleExtension ext は.jpgの方とほぼ同じ記述だけど、こちらは代入
さしあたって、切り分けできるのかな? 出来たとしても、わかりずらいし。
=========== ソース ============
let (|FIleExtension|) filepath=Path.GetExtension(filePath)
let determinFIleType(filepath :string)
match filepath with
| FIleExtension ".jpg"->printfn "画像"
| FIleExtension ext->printfn "未知 [%s]" ext
772711
2017/01/17(火) 12:30:49.29ID:8zwXc9tZ あれ?空白が無視されてるな
match式以降はブロック別で、ずれてますので、
まぁわかりますよね
match式以降はブロック別で、ずれてますので、
まぁわかりますよね
773デフォルトの名無しさん
2017/01/17(火) 15:40:46.37ID:AtzKNi4C |の後は元の値がこのパターンに合うか?って感じの比較対象が来るのでFileExtension ".jpg"と言う値って感じに掴んでる。
正規表現の奴はそのregexを元にほにゃららを返す値って感じ。
けどほんとはパターンを区別するって言うセレクターとした方がいいのかな?
正規表現の奴はそのregexを元にほにゃららを返す値って感じ。
けどほんとはパターンを区別するって言うセレクターとした方がいいのかな?
774デフォルトの名無しさん
2017/01/17(火) 16:21:52.44ID:8zwXc9tZ たぶん違う
| FIleExtension ".jpg"->printfn "画像"の方は、
FIleExtensionの引数がfilepathで、その結果が".jpg"とマッチするかどうか
| FIleExtension ext->printfn "未知 [%s]" extの方は
FIleExtensionの引数がfilepathで、その結果をextに代入(let束縛?)
って、ことみたい(プログラミングF#に記述の例で上のように解釈するような説明あり)
実践F#にも同様な例(P295)はあるけど、こちらは、説明なし
| FIleExtension ".jpg"->printfn "画像"の方は、
FIleExtensionの引数がfilepathで、その結果が".jpg"とマッチするかどうか
| FIleExtension ext->printfn "未知 [%s]" extの方は
FIleExtensionの引数がfilepathで、その結果をextに代入(let束縛?)
って、ことみたい(プログラミングF#に記述の例で上のように解釈するような説明あり)
実践F#にも同様な例(P295)はあるけど、こちらは、説明なし
775デフォルトの名無しさん
2017/01/17(火) 16:57:47.21ID:AtzKNi4C いや俺はそう言う風な理解をしてるって話なんだが。
実体は上から順番に関数呼び出しの条件マッチだと思うが動作の仕組みを知りたいんだったらILを見れば。
実体は上から順番に関数呼び出しの条件マッチだと思うが動作の仕組みを知りたいんだったらILを見れば。
776デフォルトの名無しさん
2017/01/17(火) 17:34:24.12ID:8zwXc9tZ >ILを見れば。
たしかにね。いままで避けてきたから、考え付かなかった。
ただ、実践F#の方はなんの説明もないんだよ
それで理解できるわけないってーの
(| FIleExtension ".jpg" なら、FileExtensionの引数は”.jpg”でその結果が、filepathとマッチが
普通の理解だと思う)
多分、F#の文法理解のキモは、実践F#のどっかに書かれてた、
”let束縛や関数束縛にはパターンマッチが宿る”ってのがあって
それは何ぞやってことかなとも思うんだけど
たしかにね。いままで避けてきたから、考え付かなかった。
ただ、実践F#の方はなんの説明もないんだよ
それで理解できるわけないってーの
(| FIleExtension ".jpg" なら、FileExtensionの引数は”.jpg”でその結果が、filepathとマッチが
普通の理解だと思う)
多分、F#の文法理解のキモは、実践F#のどっかに書かれてた、
”let束縛や関数束縛にはパターンマッチが宿る”ってのがあって
それは何ぞやってことかなとも思うんだけど
777デフォルトの名無しさん
2017/01/27(金) 13:06:20.11ID:r/dqFSyQ UnityをF#でやるってどうおもう?
778デフォルトの名無しさん
2017/01/27(金) 16:23:08.47ID:11vmh7q9 やってる人いるっぽいけど、興味あるので是非人柱って欲しい
779デフォルトの名無しさん
2017/01/29(日) 11:32:18.42ID:85P/1kIo Xamarinでも使えると聞きたけど、実際に実用に耐えるレベルで使える感じ?
それともまだちょいきびしい?
それともまだちょいきびしい?
780デフォルトの名無しさん
2017/01/29(日) 16:34:59.12ID:SZxfjGEN781デフォルトの名無しさん
2017/01/29(日) 16:36:43.65ID:SZxfjGEN782デフォルトの名無しさん
2017/01/29(日) 16:38:12.30ID:SZxfjGEN783デフォルトの名無しさん
2017/01/29(日) 17:58:10.02ID:OOBDM7kI 怒濤の3連投
784デフォルトの名無しさん
2017/01/29(日) 22:48:48.26ID:fQuWVzYo785デフォルトの名無しさん
2017/01/30(月) 04:57:10.64ID:W8ulMPLc 連投ニキ結局何が言いたいのか分からなくて草
786デフォルトの名無しさん
2017/01/30(月) 08:55:41.75ID:HBz5xnGW f#はmonoで動くように作ってるので問題無いが、
あとはC#と同じくiosの制限に引っかからないかぐらいかな。
動的コード減らすように、ios向けにコンパイラ改良してるみたいではあるが。
あとはC#と同じくiosの制限に引っかからないかぐらいかな。
動的コード減らすように、ios向けにコンパイラ改良してるみたいではあるが。
787デフォルトの名無しさん
2017/01/30(月) 09:52:08.15ID:jGIG+dJc sprintfの引数5個以上にすると実機ですっ飛ぶけど後は何も問題になってない
788デフォルトの名無しさん
2017/02/24(金) 21:55:29.29ID:VHgIchSB 軽量構文では前方参照できてもよくない?
というか前方参照できないのがVSに統合してるのに広がらない大きな理由のような
というか前方参照できないのがVSに統合してるのに広がらない大きな理由のような
789デフォルトの名無しさん
2017/02/24(金) 22:38:24.91ID:U+jKQ1wi F# 4.1 から namespace rec ... で前方参照できるようになるらしい
https://github.com/fsharp/fslang-design/blob/master/FSharp-4.1/FS-1009-mutually-referential-types-and-modules-single-scope.md
https://github.com/fsharp/fslang-design/blob/master/FSharp-4.1/FS-1009-mutually-referential-types-and-modules-single-scope.md
790デフォルトの名無しさん
2017/02/25(土) 00:05:57.36ID:CJKdrsAk >>788
そんな理由でF#使うのやめるような奴いねーよ
そんな理由でF#使うのやめるような奴いねーよ
791デフォルトの名無しさん
2017/02/27(月) 22:45:13.58ID:C8vMoSWL immutableでもちゃんと書けるんだすごーい→しばらくして
現実に引き戻されちゃうold Cですら前方宣言あったよね?と
現実に引き戻されちゃうold Cですら前方宣言あったよね?と
792デフォルトの名無しさん
2017/02/27(月) 22:52:50.08ID:x8Zfjmi0 むしろ適度に参照制限されてた方がいい。ミュータブルよりイミュータブルが利点を持つのと一緒
793デフォルトの名無しさん
2017/03/01(水) 22:42:04.78ID:G3+Z4HPe (O抜きの)CAML当時のPCでは関数型言語のコンパイラで前方参照なんてやってたら
まるで使い物にならなかっただけの流れだとなんとなく思う
まるで使い物にならなかっただけの流れだとなんとなく思う
794デフォルトの名無しさん
2017/03/02(木) 17:03:36.98ID:7GIcFobN 前方参照やりだすと型推論が面倒くさいことになりそうな気がする
トップレベルの定義は型注釈必須になっちゃったりするんじゃね
トップレベルの定義は型注釈必須になっちゃったりするんじゃね
795デフォルトの名無しさん
2017/03/03(金) 00:27:09.47ID:0HpXceRa F# 4.1 未満でも↓のように関数の前方参照ができるし、前方参照に比べて余分な型注釈が必要になることもない
let rec f1 () = f2 "" + f3 1
and f2 s = s.Length
and f3 x = x
むしろ f2 のように型推論が強化される場合もある
let rec f1 () = f2 "" + f3 1
and f2 s = s.Length
and f3 x = x
むしろ f2 のように型推論が強化される場合もある
796デフォルトの名無しさん
2017/03/03(金) 01:21:41.94ID:EBp4jZQp 多分、今話題に上がってる前方参照って、同一のlet式内って狭い範囲の話じゃないと思うよ・・・
797デフォルトの名無しさん
2017/03/03(金) 02:47:10.16ID:GTe30Tvn 前方参照できないとトップダウンでは書けないよね
上から下にいくにつれて詳細化するほうが読みやすい
上から下にいくにつれて詳細化するほうが読みやすい
798デフォルトの名無しさん
2017/03/03(金) 07:08:48.90ID:xbhGesOG >>797
何言ってるのかよく分からん
何言ってるのかよく分からん
799デフォルトの名無しさん
2017/03/03(金) 20:42:40.44ID:BaUfKJHp >>798
わかるよ!
わかるよ!
800デフォルトの名無しさん
2017/03/03(金) 22:41:27.26ID:Q3zcIHzi おれもわからん
801デフォルトの名無しさん
2017/03/03(金) 23:04:52.74ID:xbhGesOG 上から下にかけて詳細化って何。
インターフェース定義とその具体的実装的なことでも言ってんの?
インターフェース定義とその具体的実装的なことでも言ってんの?
802デフォルトの名無しさん
2017/03/03(金) 23:27:50.49ID:BaUfKJHp >>800
わかるよ!
わかるよ!
803デフォルトの名無しさん
2017/03/04(土) 00:32:28.38ID:/imazuHh804デフォルトの名無しさん
2017/03/04(土) 12:38:53.96ID:GRvQ2lmz 急に延びてると思ったら
またいつものあれか
またいつものあれか
805デフォルトの名無しさん
2017/03/06(月) 23:36:11.45ID:f18Wvt72 https://ja.osdn.net/pastebin/4865
↑これっぽいことをF#でやりたいんだけど↓うまくいかない、よいアイデアありませんか?
https://ja.osdn.net/pastebin/4866
↑これっぽいことをF#でやりたいんだけど↓うまくいかない、よいアイデアありませんか?
https://ja.osdn.net/pastebin/4866
806805
2017/03/06(月) 23:37:58.97ID:f18Wvt72 guard的なものを作りたい
807デフォルトの名無しさん
2017/03/08(水) 16:37:28.78ID:JcxcGB31 Microsoft、「F# 4.1」と「Visual F# Tools for Visual Studio 2017」を発表
http://forest.watch.impress.co.jp/docs/news/1048457.html
http://forest.watch.impress.co.jp/docs/news/1048457.html
808デフォルトの名無しさん
2017/03/08(水) 16:50:08.16ID:jMX+hATM まだ保守されてたんだな
809デフォルトの名無しさん
2017/03/12(日) 14:15:47.40ID:n/E4ZIwb 研究所に担当者が興味持っている間は続くんじゃないかな。
Open EditionのREADMEには、F# Core Engineering Groupって書いてあったけど、どこの組織かはよく分からない。
https://github.com/fsharp/fsharp/blob/master/README.md#maintainers
Open EditionのREADMEには、F# Core Engineering Groupって書いてあったけど、どこの組織かはよく分からない。
https://github.com/fsharp/fsharp/blob/master/README.md#maintainers
810デフォルトの名無しさん
2017/03/19(日) 13:32:32.34ID:UkA4tC4+811デフォルトの名無しさん
2017/04/15(土) 20:49:04.54ID:TK0/vAtg 質問です
let add x y = x+y
を用いた関数合成した場合
■関数定義成功
1.let ft = add 10>> add
■関数定義失敗
2.let ft = add >> add
3.let ft = add >> add 10
2.、3.が失敗する理由は何でしょうか?
let add x y = x+y
を用いた関数合成した場合
■関数定義成功
1.let ft = add 10>> add
■関数定義失敗
2.let ft = add >> add
3.let ft = add >> add 10
2.、3.が失敗する理由は何でしょうか?
812デフォルトの名無しさん
2017/04/15(土) 21:07:11.49ID:PugiXhCo FSharpFuncが+演算子のオーバーロードを持ってないからだろ
813デフォルトの名無しさん
2017/04/15(土) 22:13:15.85ID:TK0/vAtg >>812
let add x y = x+y を let add x y = 0
にしてみたんだけど、やっぱだめでした。
エラーは以下。
エラーの見方がよくわかんないんですけど、
これ見ると、>>の左側のaddは一引数を求めると考えていいんですよね?
> let test = add>>add;;
let test = add>>add;;
----------------^^^
stdin(13,17): error FS0001: 型が一致しません。
'(int -> int) -> 'a'
という指定が必要ですが、
'int -> int -> int'
が指定されました。型 'int -> int' は型 'int' と一致しません
let add x y = x+y を let add x y = 0
にしてみたんだけど、やっぱだめでした。
エラーは以下。
エラーの見方がよくわかんないんですけど、
これ見ると、>>の左側のaddは一引数を求めると考えていいんですよね?
> let test = add>>add;;
let test = add>>add;;
----------------^^^
stdin(13,17): error FS0001: 型が一致しません。
'(int -> int) -> 'a'
という指定が必要ですが、
'int -> int -> int'
が指定されました。型 'int -> int' は型 'int' と一致しません
814デフォルトの名無しさん
2017/04/15(土) 23:41:37.70ID:PugiXhCo >> オペレータのシグネチャ見てみ。
>>は('a->'b)->('b->'c)->('a->'c)となってる。つまり('a->'b)の関数と('b->'c)の関数を受け取って('a->'c)を返す。
ここでaddを見るとint->int->intなのでこれはまたint->(int->int)でもある。
つまりintを受け取ってint->intを返す。
ここで'a->'bに当てはめると'aがint、'bがint->intとなる。
そうすると>>の右の値は(int->int)->'cでなければならない。
けれどaddを渡していてそれはint->int->intであって(int->int)->intではない。
>>は('a->'b)->('b->'c)->('a->'c)となってる。つまり('a->'b)の関数と('b->'c)の関数を受け取って('a->'c)を返す。
ここでaddを見るとint->int->intなのでこれはまたint->(int->int)でもある。
つまりintを受け取ってint->intを返す。
ここで'a->'bに当てはめると'aがint、'bがint->intとなる。
そうすると>>の右の値は(int->int)->'cでなければならない。
けれどaddを渡していてそれはint->int->intであって(int->int)->intではない。
815デフォルトの名無しさん
2017/04/16(日) 00:13:53.65ID:NYnhF7Pd >>814
Thx 大枠理解しました。
>ここでaddを見るとint->int->intなのでこれはまたint->(int->int)でもある。
特にこの見方は非常に参考になります。
多分今回の件きちんと理解すると、
自分の中でごっちゃになってる部分が結構すっきりすると思います
ここから先は、調べてみます
ありがとうございました
Thx 大枠理解しました。
>ここでaddを見るとint->int->intなのでこれはまたint->(int->int)でもある。
特にこの見方は非常に参考になります。
多分今回の件きちんと理解すると、
自分の中でごっちゃになってる部分が結構すっきりすると思います
ここから先は、調べてみます
ありがとうございました
816デフォルトの名無しさん
2017/05/06(土) 19:25:54.59ID:2H+eGUwc X Y Z Nとスペースで区切られた文字列が標準入力から入力された時、
Console.ReadLine().Split [|' '|]を、一つのletでint X Y Z Nそれぞれに入れるのには
どうしたらいいでしょうか?
Console.ReadLine().Split [|' '|]を、一つのletでint X Y Z Nそれぞれに入れるのには
どうしたらいいでしょうか?
817デフォルトの名無しさん
2017/05/06(土) 22:00:28.94ID:ME74CfU1 >>816
日本語でOK
日本語でOK
818デフォルトの名無しさん
2017/05/06(土) 22:02:02.03ID:h+8d1h53 英語でもOK
819デフォルトの名無しさん
2017/05/06(土) 22:30:58.28ID:IkyXTWA8 >>816
let [|X;Y;Z;N|]=...
let [|X;Y;Z;N|]=...
820デフォルトの名無しさん
2017/05/07(日) 01:04:25.17ID:2BTsLj3O >>819
ありがとうございます。
それ前に一回試してみてて、「試してみたけどマッチ不完全って出てムリでしたよ」書こうとして、
もう一回試してみたら、ちゃんとコンパイルできました。
何を言っているかわからないと思いますが、エラーは他の所だったんだなぁと。
ありがとうございます。
それ前に一回試してみてて、「試してみたけどマッチ不完全って出てムリでしたよ」書こうとして、
もう一回試してみたら、ちゃんとコンパイルできました。
何を言っているかわからないと思いますが、エラーは他の所だったんだなぁと。
821デフォルトの名無しさん
2017/05/07(日) 04:37:20.17ID:Q0T7PduY 競プロでもやってんのか
822デフォルトの名無しさん
2017/05/07(日) 07:56:21.67ID:nWdzBJ3w823デフォルトの名無しさん
2017/05/07(日) 14:03:57.99ID:2BTsLj3O824デフォルトの名無しさん
2017/05/08(月) 23:05:02.96ID:9wTmIyqX こないだの炎上()の件で知名度あがったのかパイザ
825デフォルトの名無しさん
2017/05/09(火) 08:36:20.20ID:sNZE435L あの程度の炎上でサービス使えなくなってたらなんも使えんで
アレは炎上大好き民族のはてな民のデイリーノルマみたいなもんや
アレは炎上大好き民族のはてな民のデイリーノルマみたいなもんや
826デフォルトの名無しさん
2017/05/10(水) 00:18:39.27ID:UDZ0DTqH PAIZAすることなくなったので、HackerrankのDashboardで修行することにしました。
827デフォルトの名無しさん
2017/05/10(水) 00:38:28.85ID:/qtBCH3O AtCoderやyukicoderでも良さそうけどな
828デフォルトの名無しさん
2017/05/10(水) 00:38:55.04ID:/qtBCH3O 競プロするなら競プロスレあるぞ
競技プログラミングにハマるプログラマのスレ 9 [無断転載禁止]c2ch.net
https://tamae.2ch.net/test/read.cgi/prog/1493085730/l50
競技プログラミングにハマるプログラマのスレ 9 [無断転載禁止]c2ch.net
https://tamae.2ch.net/test/read.cgi/prog/1493085730/l50
829デフォルトの名無しさん
2017/05/16(火) 03:37:55.78ID:e1kn8e20 match Array.countBy (fun x -> x = i + 1) array with
| [|(false, f); (true, t)|] -> t
| [|(true, t); (false,f)|] -> t
| [|(true,t)|] -> t
| [|(false,f)|] -> 0
というのは正しいのですか?ケースが増えるにしたがって、めっちゃ増えちゃう気がするんだけど、
ループとか関数で処理することはできないんでしょうか。
| [|(false, f); (true, t)|] -> t
| [|(true, t); (false,f)|] -> t
| [|(true,t)|] -> t
| [|(false,f)|] -> 0
というのは正しいのですか?ケースが増えるにしたがって、めっちゃ増えちゃう気がするんだけど、
ループとか関数で処理することはできないんでしょうか。
830デフォルトの名無しさん
2017/05/16(火) 07:10:14.68ID:DHMah8vu それフィルターじゃダメなの、
831デフォルトの名無しさん
2017/05/16(火) 10:39:32.85ID:zhIbn0v9 >>829
マッチ式の練習って意味ならこうかな
match Array.countBy (fun x -> x = i + 1) array with
| [| _ ; (true, count)|] | [| (true, count) ; _ |] -> count
| _ -> 0
関数で探すならこんな感じか
array
|> Array.countBy (fun x -> x = i + 1)
|> Array.find (fun (x, count) -> x = true)
|> snd
単に条件マッチする要素数を数えたいだけなら
Array.filter(fun x -> x = i + 1) array |> Array.length
またはこう書いたり
Array.sumBy (fun x -> if x = i + 1 then 1 else 0) array
自分も勉強中だからもっといい書き方があるかもしれない
マッチ式の練習って意味ならこうかな
match Array.countBy (fun x -> x = i + 1) array with
| [| _ ; (true, count)|] | [| (true, count) ; _ |] -> count
| _ -> 0
関数で探すならこんな感じか
array
|> Array.countBy (fun x -> x = i + 1)
|> Array.find (fun (x, count) -> x = true)
|> snd
単に条件マッチする要素数を数えたいだけなら
Array.filter(fun x -> x = i + 1) array |> Array.length
またはこう書いたり
Array.sumBy (fun x -> if x = i + 1 then 1 else 0) array
自分も勉強中だからもっといい書き方があるかもしれない
832デフォルトの名無しさん
2017/05/16(火) 12:20:07.62ID:e1kn8e20 >>830>>831
ありがとうございます。
ワイルドカードを使う、関数でフィルターする、ラムダ式を工夫する、どれも参考になります。
10日くらいやって、F#を本格的にやる覚悟ができてきたので本予約してきました。
でもまだ、典型的なループにbreakがないのには慣れないなー……
ありがとうございます。
ワイルドカードを使う、関数でフィルターする、ラムダ式を工夫する、どれも参考になります。
10日くらいやって、F#を本格的にやる覚悟ができてきたので本予約してきました。
でもまだ、典型的なループにbreakがないのには慣れないなー……
833デフォルトの名無しさん
2017/05/16(火) 13:54:00.84ID:063aFbk0 ループで分岐を行うという事に疑問を抱くところまで洗脳しましょう
834デフォルトの名無しさん
2017/05/16(火) 13:57:34.27ID:ARwha8IE 世界トップクラスのプログラマだけど質問ある?
まあねーかw
最近の日本人はたるんでねーか?
まあこんなしょぼいところに俺レベルのプログラマなんているわけねーよなwwwwwwww
まあねーかw
最近の日本人はたるんでねーか?
まあこんなしょぼいところに俺レベルのプログラマなんているわけねーよなwwwwwwww
835デフォルトの名無しさん
2017/05/16(火) 15:06:44.92ID:063aFbk0 トップクラスは仕事で何やってんのかとF#で型クラスを導入するには今のCLR上のどこに問題があるのか教えてくれ。
836デフォルトの名無しさん
2017/05/22(月) 23:51:01.26ID:Th0NDHVw UWPまだなん?
837デフォルトの名無しさん
2017/05/23(火) 03:59:59.51ID:l7rPL62D 自分も心待ちにしてる。
なんか遠く無いうちに8.1ストアアプリとかディスコンになりそうだしその前に使えるようにしてくれないと困るわ
なんか遠く無いうちに8.1ストアアプリとかディスコンになりそうだしその前に使えるようにしてくれないと困るわ
838デフォルトの名無しさん
2017/05/25(木) 01:38:45.30ID:rKV7x64q Console.ReadLine() |> intを何度も書くのが面倒で、
let CRI () =
Console.ReadLine() |> int
let m = CRI
let n = m + 1
としても、mがintではなくunit->intになってしまって上手くいきません。どうしたらいいんでしょうか。
let CRI () =
Console.ReadLine() |> int
let m = CRI
let n = m + 1
としても、mがintではなくunit->intになってしまって上手くいきません。どうしたらいいんでしょうか。
839デフォルトの名無しさん
2017/05/25(木) 02:11:45.60ID:V+ZR7ZsZ >>838
CRIの型はunit->int
つまり () をうけとってint型を返す関数
let m = CRI () ってすればいい
let m = CRI とするとmがCRIって関数のコピーになるから
let n = m () + 1 としてもいい
CRIの型はunit->int
つまり () をうけとってint型を返す関数
let m = CRI () ってすればいい
let m = CRI とするとmがCRIって関数のコピーになるから
let n = m () + 1 としてもいい
840デフォルトの名無しさん
2017/05/25(木) 12:41:52.55ID:rKV7x64q let CRI () = の()は、引数を取らない関数という意味じゃなくて、()を引数として
取る関数という意味だったんですね。
mが関数のコピーになってしまっていることは何となくわかっていましたが、
どうしたらいいかわかりませんでした。
色々まとめて関数化する入口になりました。ありがとうございます。
取る関数という意味だったんですね。
mが関数のコピーになってしまっていることは何となくわかっていましたが、
どうしたらいいかわかりませんでした。
色々まとめて関数化する入口になりました。ありがとうございます。
841デフォルトの名無しさん
2017/05/30(火) 17:43:28.11ID:MdPNaTW3 C#でwinフォームのフォント変えてた時には意識してなかったけど
F#におこられてMSDN見たら
public Font(
FontFamily family,
float emSize
)
あれfloatだったんかw
F#におこられてMSDN見たら
public Font(
FontFamily family,
float emSize
)
あれfloatだったんかw
842デフォルトの名無しさん
2017/05/30(火) 23:33:10.49ID:N9IuBPHb >>841
0.5pt刻みとか普通じゃないかね
0.5pt刻みとか普通じゃないかね
843デフォルトの名無しさん
2017/06/01(木) 01:32:04.81ID:/og4bwsZ 最初のエラーメッセージ一つつぶしてはリコンパイルしてまた怒られる繰り返しで
エラーも警告も全部潰し終わればだいたい思った通り動くものができてて
ある意味楽だよね
エラーも警告も全部潰し終わればだいたい思った通り動くものができてて
ある意味楽だよね
844デフォルトの名無しさん
2017/06/01(木) 12:14:48.83ID:o/dQD8LP 何と比べたんだ
845デフォルトの名無しさん
2017/06/01(木) 14:06:13.61ID:55CngytM C#とかだろ
まあ自分もコンパイル通ったら思い通りに動いたってのは何度も経験した
まあ自分もコンパイル通ったら思い通りに動いたってのは何度も経験した
846デフォルトの名無しさん
2017/06/01(木) 22:41:41.77ID:+IsXJy5u コンパイル通ったら思い通りに動いたって経験ないので設計力が俺にない
847デフォルトの名無しさん
2017/06/03(土) 18:00:27.61ID:X9cB+hGR まー漏れはGUIデバッグ用おまじないとして
let msgbox s = MessageBox.Show( s ) |> ignore
なんてのを毎回コピペしてるんだけどねw
let msgbox s = MessageBox.Show( s ) |> ignore
なんてのを毎回コピペしてるんだけどねw
848デフォルトの名無しさん
2017/06/04(日) 01:15:20.63ID:cMzio+d2 「ゆるふわ」な展開だよな
oO(だってデバッグでコンパイル警告増やしてる場合じゃないもん
ということで>>847をそっとクリップボードに入れたとかは言えない)
oO(だってデバッグでコンパイル警告増やしてる場合じゃないもん
ということで>>847をそっとクリップボードに入れたとかは言えない)
849デフォルトの名無しさん
2017/06/04(日) 17:19:25.85ID:schaDAVw ビルドツール2015が落とせなくなってると思ったら
最新のビルドツール(現在は2017)だけ無償提供するけど
過去のはMSDNサブスクリプション限定になったんかよ
最新のビルドツール(現在は2017)だけ無償提供するけど
過去のはMSDNサブスクリプション限定になったんかよ
850デフォルトの名無しさん
2017/06/04(日) 20:22:54.65ID:Gh2GPGm+ なんでそんなめんどくさいことしてんの
851デフォルトの名無しさん
2017/06/06(火) 02:33:04.78ID:sboLfrRP 環境作っちゃったからwそれに趣味だし
もし他人から環境作り聞かれることがあったらVSすすめるけど(質問攻めやだし)
もし他人から環境作り聞かれることがあったらVSすすめるけど(質問攻めやだし)
852デフォルトの名無しさん
2017/07/23(日) 00:57:49.83ID:M/QiPu/m ファイルにクラスとかコレクションの値を書き込んだ後に、それを読み込むのに、
一般的な方法ってありませんか?
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|]|]
みたいにデータ構造をそのままぱぱっと書き出して、ぱぱっと読める
みたいな方法はありませんでしょうか。
一般的な方法ってありませんか?
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|]|]
みたいにデータ構造をそのままぱぱっと書き出して、ぱぱっと読める
みたいな方法はありませんでしょうか。
853デフォルトの名無しさん
2017/07/26(水) 12:12:26.43ID:3m31p4un BinaryFormatter使えばいいんでない?
テキストではなくなるけど
テキストではなくなるけど
854デフォルトの名無しさん
2017/07/26(水) 14:16:56.19ID:1pDXQGYB 調べてみます。
ありがとうございます。
ありがとうございます。
855デフォルトの名無しさん
2017/09/02(土) 22:37:34.57ID:RddLJ47T F#人気にシット
856デフォルトの名無しさん
2017/09/03(日) 01:52:15.83ID:JGQnBQPD どこでそんなにんきなんだよ
857デフォルトの名無しさん
2017/09/03(日) 16:58:23.14ID:skndupQG 当社比
858デフォルトの名無しさん
2017/09/16(土) 06:54:46.85ID:AcW1bn43 びっくりするほどF#の話題ないね
言語人気ランキングだと関数型の中では
Scalaについで上位なんだけど
言語人気ランキングだと関数型の中では
Scalaについで上位なんだけど
859デフォルトの名無しさん
2017/09/16(土) 12:50:44.18ID:ZCzFTInQ 無冠の帝王
860デフォルトの名無しさん
2017/09/16(土) 17:42:17.40ID:1hHCSG56 言語のバージョンアップも大してないしな
まあ自分はコンピュテーション式の組み立てとかも適当にしかできないので猿でもわかるコンプ式とか誰か上げてくれ
まあ自分はコンピュテーション式の組み立てとかも適当にしかできないので猿でもわかるコンプ式とか誰か上げてくれ
861デフォルトの名無しさん
2017/09/20(水) 19:05:13.20ID:OSLHfjgE 完成度がたかいともいう
862デフォルトの名無しさん
2017/09/24(日) 11:05:49.20ID:ByZ250WW863デフォルトの名無しさん
2017/09/24(日) 16:06:41.16ID:vDIeG6fi Scalaは言語として色々とんがってるから言語マニアを引きつけるのと、比較対象となるJAVAがアレなところが。
C#も色々アレなとこはあるけどモダンな言語機能も取り込んでるしJavaよりは遥かにマシだからな
C#も色々アレなとこはあるけどモダンな言語機能も取り込んでるしJavaよりは遥かにマシだからな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 青銅聖闘士のパンチは音速←わかる 白銀聖闘士はその数倍←まぁわかる 黄金聖闘士は光速←は?
- 4時だから窓から4回ちんこ出した
- クマどもが冬眠拒否
- さわやかって
- 生活保護を受けている私だけど、おはようございます。
- 【朗報】ローソン「Мサイズのカップを購入してLサイズのコーヒーを入れてくださいね」 [455031798]
