# はじめに
普段使いのSwiftに加えて、Rust, Elmに慣れるためにトライする実行環境紹介ページです。
言語処理100本ノック2015はこちら
http://www.cl.ecei.tohoku.ac.jp/nlp100/
この方がスマートあるいは処理効率が良いなどありましたら、コメントくださいませ。
## 00. 文字列の逆順
文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.
おまけで文字列のUnicodeコードポイント/バイト列表示。
### Swift
String peace = "azatoi"; > String("stressed".reversed()) String = "desserts" > "stressed".reversed() ReversedCollection<String> = { _base = "stressed" } # Stringで囲まないと、ReversedCollection<String>が返ってくるようです。 # 昔にSwift3の時に練習した時のを掘り出すと.charactersというString.CharacterViewを使わないとダメでしたが、 # Swift4からはStringから直接使えるようになりましたね。 > String("stressed".characters.reversed()) # 文字列のUnicodeのコードポイントを返す # https://developer.apple.com/documentation/swift/unicode/scalar # Unicode スカラは U+0000 〜 U+D7FF または U+E000 〜 U+10FFFF の範囲に含まれるコードポイントです。 # Unicode スカラは U+D800 〜 U+DFFF の範囲に含まれるコードポイントであるサロゲートペアのコードポイントは含まれません。 > "Go言語".unicodeScalars.map { print($0.value) } 71 111 35328 35486 # 文字列のバイト列を返す > Array("Go言語".utf8) $R1: [String.UTF8View.Element] = 8 values { [0] = 71 [1] = 111 [2] = 232 [3] = 168 [4] = 128 [5] = 232 [6] = 170 [7] = 158 } }
### Elm
> String.reverse "stressed" "desserts" : String > "stressed" |> String.reverse "desserts" : String -- パイプじゃないとまだ慣れないなぁ -- Char型がUnicodeのコードポイント(32bit数値表現かな)ということで試してみました。 -- https://package.elm-lang.org/packages/elm/core/latest/Char#toCode > "Go言語" |> String.toList |> List.map Char.toCode [71,111,35328,35486] : List Int -- バイト列を表示するには -- ライブラリ導入が早いです。 -- https://package.elm-lang.org/packages/ktonon/elm-word/2.1.2/ > import Word.Bytes exposing (..) > Word.Bytes.fromUTF8 "Go言語" [71,111,232,168,128,232,170,158]
### Rust
> "stressed".chars().rev().collect::<String>() "desserts" "stressed".chars().rev() Rev { iter: Chars { iter: Iter([115, 116, 114, 101, 115, 115, 101, 100]) } } // collectしないと文字列のバイト列が返ってくる。 // https://doc.rust-lang.org/std/primitive.char.html "Go言語".chars() Rev { iter: Chars { iter: Iter([71, 111, 232, 168, 128, 232, 170, 158]) } } "Go言語".as_bytes() [71, 111, 232, 168, 128, 232, 170, 158] // StringはVec<u8>のラッパです。上記は単純にバイト列を返しているだけです。言と語はそれぞれ3バイト使います。 // Unicodeコードポイントの32bit数値表現だとしたら、Iter([71, 111, 35328, 35486]) で返ってくる。 // Unicodeコードポイントが返ってくる実装については一旦保留