Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    pocketberserker
    @pocketberserker
    これ、試してもらったんですけどダメでした><。
    ReSharperが頑張ったのかな・・・?
    残念
    callmekohei
    @callmekohei

    <2次元表をリストでつくる>

    たびたびすみません。お手すきのときにでも。。。
    リストから2次元表を作りたいです。dt0, dt1, dt2とかなり
    不恰好な作り方をしてますがこの部分を多分reduce/fold
    出来る気がしてるのですが、どうすればいいかわかりません。
    ヒントをいただけるとうれしいです。(^_^)
    name      age       gender    
    ------------------------------
    kohei     32        Male      
    taro      28        Male      
    tomoko    31        Female
    module create_2Dtable =
    
        // data
        let Name   = ["kohei" ; "taro" ; "tomoko"]
        let Age    = [32;28;31]
        let Gender = ["Male"  ; "Male" ; "Female"]
    
        let Index  = ["name"  ; "age"  ; "gender"]
        let Age' = Age |> List.map ( fun x -> string x)
        // ここが不恰好、、、な気がします。。。
        let dt0 = [Name.Item 0; Age'.Item 0; Gender.Item 0]
        let dt1 = [Name.Item 1; Age'.Item 1; Gender.Item 1]
        let dt2 = [Name.Item 2; Age'.Item 2; Gender.Item 2]
    
        let prettyPrint idx dt =
    
            Index |> List.iter ( printf "%-10s" )
    
            let dashline =
                List.replicate 30 "-"
                |> List.reduce (+)
                |> printfn "\n%s"
    
            dt
            |> List.map ( List.map (sprintf "%-10s") )
            |> List.map ( List.reduce (+) )
            |> List.iter ( printfn "%s" )
    
        [dt0; dt1; dt2] |> prettyPrint Index
    Yukitoshi Suzuki
    @yukitos
    List.zip3 とか?
    callmekohei
    @callmekohei
    なるほどです!この場合zip3便利です〜(^_^)/
    タプルなんですね。[("kohei", 32, "Male"); ("taro", 28, "Male"); ("tomoko", 31, "Female")]
    あ、以前にペンギンさんに教えていただいた分でいけるかも、、、。
    callmekohei
    @callmekohei
    できました〜。これでいいはず。。ユキトスさん(とペンギンさん)ありがとうございます!
        let ListBind lst =
            List.init (List.length lst) id
            |> List.map (fun i -> lst |> List.map (fun l -> List.item i l))
    
        [Name; Age'; Gender]
        |> ListBind
        |> prettyPrint Index
    callmekohei
    @callmekohei

    <文字を足す行為に関して>

    たびたびすみません。文字を足すと数字になります。文字列だと足せます。文字を足すことはできないのでしょうか?
    'A' + 'B'
    |> printfn "%A"
    // '\131'
    
    ['A';'B']
    |> List.reduce (+)
    |> printfn "%A"
    // '\131'
    
    "A" + "B"
    |> printfn "%A"
    // "AB"
    
    ["A";"B"]
    |> List.reduce (+)
    |> printfn "%A"
    // "AB"
    bleis-tift
    @bleis-tift
    文字を足してどうなってほしいんですか?
    callmekohei
    @callmekohei
    単純にABになるかと思ったのですが、、、。
    bleis-tift
    @bleis-tift
    '0' + '1' // => 'a'
    int '0' + int 'a' // => 97
    int 'a' // => 97
    char 97 // => 'a'
    「文字」と言うように、charが表すのは1文字ですので、足して2文字になったりはしませんよ
    それとも、文字と文字を足して文字列が出てきてほしい?
    callmekohei
    @callmekohei
    おおおおお。'0' + '1'aになるんですね!初めて知りました!!!!不思議な感じがします!
    Matsushima, Kazuhiro
    @Gab-km
    char型の値は、実は文字であって文字でないのです。
    裏側は、整数になっています。
    (* 最近流行ったアレ *)
    char(int('生') &&& int('死'))
    bleis-tift
    @bleis-tift
    let inline (+++) a b = string a + string b
    と定義すると、
    'a' +++ 'b' // => "ab"
    とできますね
    MIYAZAKI Shohei
    @hafuu
    > char(int('生') &&& int('死'));;
    val it : char = '愛'
    callmekohei
    @callmekohei
    ガブさん 愛!
    ブレイスさん!おおお。なるほどです!
    charstringは別物なんですね!で、charintみたいなものなんですね、実際は。理解しました!
    Yukitoshi Suzuki
    @yukitos
    > [|'a';'b';'c';'d'|] |> System.String.Concat;;
    val it : string = "abcd"
    callmekohei
    @callmekohei
    ???ユキトスさん、、、なぜに???string
    Yukitoshi Suzuki
    @yukitos
    複数のcharを足して文字列にしたいならこういう方法もありますね
    callmekohei
    @callmekohei
    なるほどです!
    bleis-tift
    @bleis-tift
    Concatはいつからだったか、seq<'T>のオーバーロードが追加されたので、リストでもいけますね
    > ['a'..'d'] |> System.String.Concat;;
    val it : string = "abcd"
    Yukitoshi Suzuki
    @yukitos
    charはstringの1文字版という漠然とした理解:)
    callmekohei
    @callmekohei
    [|'生';'死'|]
    |> System.String.Concat
    |> printfn "%A"
    // "生死"
    Yukitoshi Suzuki
    @yukitos
    > "abc".[1];;
    val it : char = 'b'
    単にstringのItemプロパティがcharを返すというだけですけど。
    callmekohei
    @callmekohei
    わぁ〜、すごくおもしろいです!!!!!
    bleis-tift
    @bleis-tift
    stringの場合、ItemじゃなくてCharsとかじゃなかったでしたっけ?
    Yukitoshi Suzuki
    @yukitos
    ああそうだったかもしれません。F#の"string".[N]"string".Chars[N]にマップされているだけかも。
    bleis-tift
    @bleis-tift
    @sayurin さんがそのあたり追っていた気がします
    たしか、何か属性が付いていたんだったかな
    IndexerName属性が付いてますね
    Yukitoshi Suzuki
    @yukitos
    :+1:
    callmekohei
    @callmekohei
    :+1:
    Yukitoshi Suzuki
    @yukitos
    なるほど。
    callmekohei
    @callmekohei
    ビギナーな僕ならではのまとめ記事かいてみました〜。(と、途中ですけど)まつがい等あればご指摘ください〜。
    https://github.com/callmekohei/FSharpMonkey
    Matsushima, Kazuhiro
    @Gab-km
    :+1:
    本文とは関係ないんですが、ライセンスで"software"となっていますが、ドキュメントだけでしょうかね……?