スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

どう書く?org F# 文字変換表に基く文字列の変換

「どう書く?org」http://ja.doukaku.org/に挑戦です。 
さて今回の問題は次のような内容。 
 
問題 http://ja.doukaku.org/148/
 
UNIXのtrコマンドや、Perlのtr演算子のように、指定した対応づけに従って文字を変換する関数を作成して下さい。 
予め言語内に用意されている場合は、(1)一般的な使用法と、(2)より進んだ使用方法を提示して下さい。 
 
'ABCDEF'と'abcdef'等すべて対応する文字を書く必要があるものを、(1)基本版、'A-Z'と'a-z'のように"-"で範囲を指定できるものを(2)拡張版、2を更に発展させたものを(3)発展版とします。任意のものを選んで解答して下さい。 
 
実行例. (与えられた文字列が、"typewriter"の場合) 
tr 'qwertyuiop' 'QWERTYUIOP' "typewriter" 
=> TYPEWRITER 
 
今回のテーマは「Array.foldを使う」です。(そんなたいしたものでは全然ないですが。)
 
コードは下の通りです。(tr1が基本版、tr2が拡張版です。)エラー処理とかは全然行っていません。
 
let Tr1  (st1 :string) (st2 : string) (target:string) =
    Array.zip (st1.ToCharArray()) (st2.ToCharArray()) |>
    Array.fold (fun (s:string) (cf,ct) -> s.Replace(cf,ct)) target  
 
let Tr2  (st1:string) (st2:string) (target:string) =
    Array.zip [|(st1.Chars 0) .. (st1.Chars 2)|] [|(st2.Chars 0) .. (st2.Chars 2)|] |>
    Array.fold (fun (s:string) (cf,ct) -> s.Replace(cf,ct)) target  
    
実行例
 
> tr1 "qwertyuiop" "QWERTYUIOP" "typewriter" ;;
val it : string = "TYPEWRITER"
 
> tr2  "a-p" "A-P" "typewriter";;
val it : string = "tyPEwrItEr"   
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。