文字列を入力し1文字ずつ見て置換するプログラム [Haskell]
とりあえず入力した文字列のなかで0か1があれば変換して出力するという感じの物ができた
実行結果
ソース
実行結果
Prelude> :l bi.hs
[1 of 1] Compiling Main
Ok, modules loaded: Main.
*Main> fx "012301"
"ab23ab"
*Main>
ソース
word :: String -> String
fx :: String -> String
bi :: Char -> Char
bi c | c=='0' ='a'
| c=='1' ='b'
| otherwise = c
word [] = []
word (c:cs) = bi c : word cs
fx s = unwords $ map word $ words s
words関数 unwords関数 [Haskell]
テンションあがってきたwww
words関数は空白で区切ってある文字列を分割してくれます
空白に区切らないとそのまま直に入るけど
unwords関数は,
空白は入るけど,文字列を連結してくれます.
すばらしいです
↓適当過ぎる実行例
words関数は空白で区切ってある文字列を分割してくれます
空白に区切らないとそのまま直に入るけど
unwords関数は,
空白は入るけど,文字列を連結してくれます.
すばらしいです
↓適当過ぎる実行例
Prelude> unwords ["s","g","89"]
"s g 89"
Prelude> words "678"
["678"]
Prelude> words "3 x ^ 2 + 5 x ."
["3","x","^","2","+","5","x","."]
String -> Char [Haskell]
とりあえず 適当に変えたら出来たところまで
===
word :: String -> String
fx :: String -> String
hoge :: Char -> Char
hoge c = c
word [] = []
word (c:cs) = hoge c:cs
fx s = unwords $ map word $ words s
===
hige に入ったcを,数字かどうか見ていく
んで 微分しなきゃならんねぇ・・
===
word :: String -> String
fx :: String -> String
hoge :: Char -> Char
hoge c = c
word [] = []
word (c:cs) = hoge c:cs
fx s = unwords $ map word $ words s
===
hige に入ったcを,数字かどうか見ていく
んで 微分しなきゃならんねぇ・・
map とりあえず分からない [Haskell]
リスト内の各々の要素にある関数を適用し,その結果のリストを返す
mapの型は(a -> b) -> [a] -> [b]であり,データ構造内の各要素に関数を適用するための「高階関数(higher-order function)」として定義
だから何なんだw
要するに,StringからCharになるんですか?
今したいのは,Stringを入力して,Charに分割してリストに入れる
んで,出力なんです
(↑ 超初歩段階w
だめだわー
mapの型は(a -> b) -> [a] -> [b]であり,データ構造内の各要素に関数を適用するための「高階関数(higher-order function)」として定義
だから何なんだw
要するに,StringからCharになるんですか?
今したいのは,Stringを入力して,Charに分割してリストに入れる
んで,出力なんです
(↑ 超初歩段階w
だめだわー
うつしたけどよくわからないHaskellさん [Haskell]
wordsCount :: String -> Int
wordsCount str = outWords str
where wordScan f [] = 0
wordScan f (c:cs) | isAlphaNum c = f (inWords cs)
| otherwise = outWords cs
outWords :: String -> Int
outWords str = wordScan(\n -> 1 + n) str
inWords :: String -> Int
inWords str = wordScan id str
wordsCount str = outWords str
where wordScan f [] = 0
wordScan f (c:cs) | isAlphaNum c = f (inWords cs)
| otherwise = outWords cs
outWords :: String -> Int
outWords str = wordScan(\n -> 1 + n) str
inWords :: String -> Int
inWords str = wordScan id str
型 [Haskell]
char 型
'a' '!' シングルクォートで囲まれたものは文字
Bool型
ifで真理値を表す場合にTrue かFalseを返す その時の型
数値
31ビット -> Int
任意長精度整数 ー> Interger
有理数 ー> Rational
浮動小数点少数 ー> Float
倍精度浮動小数点少数 ー> Double
'a' '!' シングルクォートで囲まれたものは文字
Bool型
ifで真理値を表す場合にTrue かFalseを返す その時の型
数値
31ビット -> Int
任意長精度整数 ー> Interger
有理数 ー> Rational
浮動小数点少数 ー> Float
倍精度浮動小数点少数 ー> Double
|の書き方に注意が必要 [Haskell]
インデントに注意が必要です
式 | 条件式
| 条件式
これより前にあるとダメです
エラーで2時間もロスしますw
式 | 条件式
| 条件式
これより前にあるとダメです
エラーで2時間もロスしますw
rem == % [Haskell]
rem
実際には'rem'は%と同様の意味(だろう
f :: integer -> [interger]
fは,intergerで入力してintergerで返す
という意味
実際には'rem'は%と同様の意味(だろう
f :: integer -> [interger]
fは,intergerで入力してintergerで返す
という意味
main がないものをロードして出力 [Haskell]
test.hsを作成
中身は以下
===
===
んで
んで,このプログラムの場合は,
と返ってきた!!
※ まぁ そこら辺に落ちてたファイルをコピーしてコンパイル下だけだから出来てあたりまえww
戻るときは:l と入力すると戻れた!!
中身は以下
===
add :: Integer -> Integer -> Integer
add x y = x + y
===
んで
>ghci(↑ :lがロードという意味,test.hsをロードせよという感じ)
>:l test.hs
んで,このプログラムの場合は,
>add 1 3
4
と返ってきた!!
※ まぁ そこら辺に落ちてたファイルをコピーしてコンパイル下だけだから出来てあたりまえww
戻るときは:l と入力すると戻れた!!