Dize/Haskell içinde Yüzer Tamsayı dönüştürmek?
data GroceryItem = CartItem ItemName Price Quantity | StockItem ItemName Price Quantity
makeGroceryItem :: String -> Float -> Int -> GroceryItem
makeGroceryItem name price quantity = CartItem name price quantity
Bir Dize kullanarak veya [String] Groceryİtem oluşturmak istiyorum
createGroceryItem :: [String] -> GroceryItem
createGroceryItem (a:b:c) = makeGroceryItem a b c
Giriş biçiminde olacak ["","15.00",""] 5 Yukarı kullanarak kelimeler haskell işlevi kırdım. Apple Bu makeGroceryİtem bir Şamandıra kabul ettiğinden ve bir İnt bence bu hata alıyorum. Ama nasıl b ve c Şamandıra yapabilirim ve sırasıyla İnt?
*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*
Önceden:) çok teşekkürler
CEVAP
read
yüzer ve int içine bir dize ayrıştırmak
Prelude> :set t
Prelude> read "123.456" :: Float
123.456
it :: Float
Prelude> read "123456" :: Int
123456
it :: Int
Ama sorun (1) desen:
createGroceryItem (a:b:c) = ...
Burada :
bir listeye öğe başa (sağ çağrışımlı) ikili bir operatör. Bir öğenin OLUŞTURDUĞU bir liste olmalı. Bu nedenle, ifade verildi a:b:c
Haskell aşağıdaki türleri sonucuna:
a :: String
b :: String
c :: [String]
yani c
dizeleri bir liste olarak düşünülebilir. Belli ki read
veya herhangi bir fonksiyon bir Dize bekliyor geçmiş.
Bunun yerine kullanmalısınız
createGroceryItem [a, b, c] = ...
eğer bu liste tam 3 öğe olması gerekir, ya da
createGroceryItem (a:b:c:xs) = ...
≥3 ise öğeleri kabul edilebilir.
Ayrıca (2), deyim
makeGroceryItem a read b read c
hangi makeGroceryItem
5 bağımsız, 2 olarak yorumlanacaktır read
işlevi vardır. Parantez kullanmanız gerekir:
makeGroceryItem a (read b) (read c)
Nasıl dize dönüştürmek için javascript...
Nasıl JavaScript bir Tamsayı bir Dize ...
Hızlı dize PHP bir tamsayı dönüştürmek...
java : Dize ve Dize için yüzer yüzer d...
Android için bir tamsayı bir dize dönü...