Haskellで文字列を整数/浮動小数点に変換する?
2023-08-30 17:49:23
質問
data GroceryItem = CartItem ItemName Price Quantity | StockItem ItemName Price Quantity
makeGroceryItem :: String -> Float -> Int -> GroceryItem
makeGroceryItem name price quantity = CartItem name price quantity
I want to create a `GroceryItem` when using a `String` or `[String]`
createGroceryItem :: [String] -> GroceryItem
createGroceryItem (a:b:c) = makeGroceryItem a b c
入力は以下のような形式になります。
["Apple","15.00","5"]
という形式で、これをHaskellの
words
関数を使って分割しました。
以下のようなエラーが出ますが、これは
makeGroceryItem
が
Float
と
Int
.
*Type error in application
*** Expression : makeGroceryItem a read b read c
*** Term : makeGroceryItem
*** Type : String -> Float -> Int -> GroceryItem
*** Does not match : a -> b -> c -> d -> e -> f*
しかし、どのようにすれば
b
と
c
型の
Float
と
Int
というように、それぞれ?
どのように解決するのですか?
read
は、文字列をfloatとintにパースすることができます。
Prelude> :set +t
Prelude> read "123.456" :: Float
123.456
it :: Float
Prelude> read "123456" :: Int
123456
it :: Int
しかし、問題(1)はあなたのパターンにあります。
createGroceryItem (a:b:c) = ...
ここで
:
は(右結合)二項演算子で、リストに要素を前置します。要素の右辺はリストでなければなりません。従って、次の式が与えられると
a:b:c
という式が与えられると、Haskellは次のような型を推論します。
a :: String
b :: String
c :: [String]
すなわち
c
は文字列のリストとみなされます。明らかに、それは
read
であったり、文字列を期待する関数に渡されることはありません。
代わりに
createGroceryItem [a, b, c] = ...
リストがちょうど3つの項目を持たなければならない場合、または
createGroceryItem (a:b:c:xs) = ...
の場合、≧3項目が許容されます。
また、(2)では、式
makeGroceryItem a read b read c
は、次のように解釈されます。
makeGroceryItem
は5つの引数を取り、そのうちの2つは
read
という関数がある。括弧を使用する必要があります。
makeGroceryItem a (read b) (read c)
関連
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] 通貨を表すのにDoubleやFloatを使ってはいけないのですか?
-
[解決済み] HTML5でfloat入力タイプはありますか?
-
[解決済み] Javaでfloatをintに変換する方法
-
[解決済み】Haskellの入門編
-
[解決済み] Haskellでグラフはどのように表現するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜパースエラーになるのか?インデント?
-
[解決済み] Haskellです。パターンでのパースエラー
-
[解決済み] Haskellバイナリツリー
-
[解決済み] Haskellで副作用がモナドとしてモデル化されているのはなぜですか?
-
[解決済み] Haskellにはなぜ "data "と "newtype "があるのですか?重複] [重複] [重複
-
[解決済み] リーダーモナドの目的は何ですか?
-
[解決済み] なぜ遅延評価が有効なのか?
-
[解決済み] Haskellの初心者向けガイド?[終了しました]
-
[解決済み] Haskellの合成演算子(.)とF#のパイプ転送演算子(|>)の比較
-
[解決済み] パラモルフィズムとは何ですか?