1
1

More than 5 years have passed since last update.

F# 文字列を使ってみる

Posted at

始めに

F#の文字列で色々遊んでみました
Stringモジュール関数(mapとかcollect)はいまいち使い勝手が悪いので特に取り上げていません
その代わり、文字列をリスト化して色々プログラミングしてみました

コード

module File2
//F#でに文字列を使おう!
let a = "<html>" //リテラルの宣言
printfn "%s " a //<html>が表示される

//文字列の分割
printfn "%s " a.[3..5] 
//ml>が表示される
//文字列のindexの3番目から5文字目まで取る
//javaのsubstring(int,int)の挙動と同じ
//printfn "%s " a.[3..6] これは例外が発生する

//文字列のリスト化
//Stringからcharの配列に 変換する
let charlist = a.ToCharArray(0,a.Length)
//charの配列をリストに 変換する
let b = Array.toList charlist 
printfn "%A" b //['<'; 'h'; 't'; 'm'; 'l'; '>']が表示される
printfn "%O" b //[<; h; t; ... ]が表示される


//パターンマッチを使ってリストの中身を標準出力へ出力する
let rec printArrayItems strs  =
    match strs with
    |x::xs->printfn "%A" x;printArrayItems xs
    |[]  -> ()


//パターンマッチを使って文字列がhtmlタグかどうか判定する
//ここは単純に<>の文字列が<→>の順番で入っていればhtmlタグとする
let rec isHtmlTag strs isLtChar isGtChar =
    match strs with
    |x::xs->match x with
            |'<' -> isHtmlTag xs  true    isGtChar
            |'>' -> match isLtChar with
                    |true  ->isHtmlTag xs isLtChar true
                    |false ->isHtmlTag xs isLtChar false
            |_   -> isHtmlTag xs isLtChar isGtChar
    |[]  -> isLtChar && isGtChar

let a1 = ">html<" 
let charlist1 = a1.ToCharArray(0,a1.Length)
let b1 = Array.toList charlist1

let a2 = "html" 
let charlist2 = a2.ToCharArray(0,a2.Length)
let b2 = Array.toList charlist1


in
printArrayItems b
//'<'
//'h'
//'t'
//'m'
//'l'
//'>'
//が表示される

let r =isHtmlTag b false false
printfn "%b" r  //trueが表示される

let r1 =isHtmlTag b1 false false
printfn "%b" r1 //falseが表示される

let r2 =isHtmlTag b2 false false
printfn "%b" r2 //falseが表示される

疑問点

  • 文字列をリストにするスマートな方法はないものだろうか?
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1