Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
RFinanceJはじめました
Next
Download to read offline and view in fullscreen.

3

Share

Download to read offline

F#談話室(17)

Download to read offline

F# meet-up in Japan(2015/2/14)

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

F#談話室(17)

  1. 1. F#談話室(17) よくわからないこと を質問したら、談 話室の神々が助 けてくれた件 @TERAMONAGI0
  2. 2. WHOAMI? @teramonagi /R/F#/C++/Ruby/VBA .NETわからない勢 「あれ読めこれやれ」的なアドバイスを強く求めます!!! このスライドもF#で作ってます ⇒ FsReveal
  3. 3. 内容 よくわからなかったことをF#談話室で質問したら見事に解決して いただきました! 以下、質問(Q)とその回答(A)が続きます
  4. 4. [Q1]判別共有体の要素数が欲しい 以下のコードだと、Moge |> sizeとかやると3ってなってほしい どう書いたらいいの、僕… 1: 2: 3: 4: 5: 6: typeHoge= |A=1 |B=2 typeMoge= |M1ofHoge |M2
  5. 5. [A1]REFLECTION使え Microsoft.FSharp.Reflectionを使うと良いとのことでした 今回のケースだと以下でOK、汎用的にしたければ再帰でがん ばれ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: letlengthtype_name= Reflection.FSharpType.GetUnionCases(type_name)|> Array.map(funu-> letfield=u.GetFields() matchArray.lengthfieldwith |0->1 |_->System.Enum.GetValues(field.[0].PropertyType)|> Seq.cast<Hoge>|>Seq.length )|> Array.sum //3と表示される typeof<Moge>|>length
  6. 6. [Q2]オーバーロードし過ぎ… 格好つけようとしたらintが足せなくなった!!! ちゃんとモジュール(名前空間?)なんかを使えってこと? 1: 2: 3: 4: 5: 6: 7: 8: 9: typeHoge=|A|B let(+)(lhs:Hoge)(rhs:Hoge)= match(lhs,rhs)with |(A,_)->A |(_,_)->B //動く B+B //この式に必要な型は Hogeですが、ここでは次の型が指定されています int letx= 2+3
  7. 7. [A2]MODULEちゃんと分けるか、INLINE使 え 基本、moduleや名前空間でちゃんと分けよう コンパイルするならinline付けておけばコンパイル時に展開され るのでOK
  8. 8. [Q3]配列の最大要素のインデックスを取りた い indexと値をzipしてmaxby, mapi いい書き方が知りたい 1: 2: 3: letx=[|1;5;2;3|] letmaxX=x|>Array.max [|0..(Array.lengthx-1)|]|>Array.filter(funi->x.[i]=maxX)
  9. 9. [A3]MAPI使うといいかも? こんなんどうでしょう 1: 2: 3: x|> Array.mapi(funiy->ify=maxXthenielse-1)|> Array.filter((<>)-1)
  10. 10. [Q4]SYSTEM.ARRAYIS何… Enum.GetValuesの結果がSystem.Arrayになる F#の型に持っていくのが辛い 1: 2: 3: 4: 5: 6: 7: typeHoge= |A=0 |B=1 letelements=System.Enum.GetValues(typeof<Hoge>) elements|> Seq.cast|> Seq.map(funo->o|>unbox<Hoge>)
  11. 11. [A4]普通にCASTしましょう ダウンキャスト:?>かSeq.cast<Type>を使おう 1: 2: elements|>Seq.cast<Hoge> elements:?>Hoge[]
  12. 12. [Q5]MAPとDICTIONARYの違いがよくわか んねぇよ…(1) KeyValue関数使ったり使わなかったり... .NET周りのお勉強は何をやったらいいの…
  13. 13. [A5]MAPとDICTIONARYの違いがよくわかん ねぇよ…(2) これを読めばいいのでは…?
  14. 14. [A5]MAPとDICTIONARYの違いがよくわかん ねぇよ…(3) ありがとう、 !!!ねのさん
  15. 15. (おまけ)数式も書けるINFSREVEAL f(x) = +x 3 1 3 x 2
  16. 16. END
  • alfonsogarciacaro7

    Feb. 17, 2015
  • tysayzmukai

    Feb. 15, 2015
  • AndrePemmelaar

    Feb. 15, 2015

F# meet-up in Japan(2015/2/14)

Views

Total views

1,390

On Slideshare

0

From embeds

0

Number of embeds

45

Actions

Downloads

4

Shares

0

Comments

0

Likes

3

×