Size: a a a

2020 December 24

MS

M S in Haskell
Yuuri
Вам от каждого товара надо получить стоимость (которая возможно по-разному считается в зависимости от типа товара), а в конце их сумму?
Да
источник

Y

Yuuri in Haskell
M S
Понятно, а почему его нельзя использовать как тип товара
Не понимаю вопрос. replicateM_ n greet означает “выполнить n раз greet, отбросив результат”
источник

MS

M S in Haskell
{-# LANGUAGE MultiWayIf #-}
import System.IO
import Data.Fixed

main :: IO ()
main = do
   
   hSetBuffering stdout NoBuffering
   putStr "Enter name ... "
   title <- getLine

   putStr "Enter quantity ... "
   quantity <- readLn :: IO Float

   putStr "Enter a price ... "
   price <- readLn :: IO Float

   putStr "Type 1 or 2 "
   typeofprod <- readLn :: IO Float
   putStrLn (if   | typeofprod == 1 -> "1 total" ++ show ( quantity * price)
                  | typeofprod == 2 -> "2 50%" ++ show ( quantity * price / 2)
                  | otherwise -> "Type 1 or 2" )
источник

MS

M S in Haskell
M S
{-# LANGUAGE MultiWayIf #-}
import System.IO
import Data.Fixed

main :: IO ()
main = do
   
   hSetBuffering stdout NoBuffering
   putStr "Enter name ... "
   title <- getLine

   putStr "Enter quantity ... "
   quantity <- readLn :: IO Float

   putStr "Enter a price ... "
   price <- readLn :: IO Float

   putStr "Type 1 or 2 "
   typeofprod <- readLn :: IO Float
   putStrLn (if   | typeofprod == 1 -> "1 total" ++ show ( quantity * price)
                  | typeofprod == 2 -> "2 50%" ++ show ( quantity * price / 2)
                  | otherwise -> "Type 1 or 2" )
Например в этом коде можно только один раз вести только один тип товара и получить общую стоимость
источник

Y

Yuuri in Haskell
Так на что влияет typeofprod?
источник

MS

M S in Haskell
Я хотел несколько раз ввести разные товары и получать их общую сумму
источник

MS

M S in Haskell
Пока что не на что
источник

MS

M S in Haskell
))
источник

к

кана in Haskell
а откуда взять число товаров?
источник

к

кана in Haskell
оно вводится до этого, или нужны какие-то команды?
источник

MS

M S in Haskell
Заранее вводиться
источник

MS

M S in Haskell
кана
оно вводится до этого, или нужны какие-то команды?
Для авторизации мне ещё долго надо учиться))
источник

к

кана in Haskell
type Item = (String, Int)

readItem :: Int -> IO Item
readItem i = do
 putStrLn $ "Enter item #" <> show i
 name <- readLn
 price <- readLn
 pure (name, price)

total :: [Item] -> Int
total items = sum (map snd item)

main = do
 n <- readLn
 items <- for [1..n] readItem
 print $ total items



инлайн версия


main = do
 n <- readLn
 items <- for [1..n] \i -> do
   putStrLn $ "Enter item #" <> show i
   name <- readLn :: IO String
   price <- readLn :: IO Int
   pure (name, price)
 print $ sum $ map snd $ items
источник

к

кана in Haskell
for принимает в данном случае список чисел от 1 до n, и для каждого числа выполняет какое-то IO действие, которое что-то возвращает (в данном примере пару)
источник

к

кана in Haskell
список всех пар идет в items
источник

MS

M S in Haskell
Yuuri
Так на что влияет typeofprod?
Поменял код теперь во втором случае выводит 50% поделив общую сумму на 2
источник

MS

M S in Haskell
кана
type Item = (String, Int)

readItem :: Int -> IO Item
readItem i = do
 putStrLn $ "Enter item #" <> show i
 name <- readLn
 price <- readLn
 pure (name, price)

total :: [Item] -> Int
total items = sum (map snd item)

main = do
 n <- readLn
 items <- for [1..n] readItem
 print $ total items



инлайн версия


main = do
 n <- readLn
 items <- for [1..n] \i -> do
   putStrLn $ "Enter item #" <> show i
   name <- readLn :: IO String
   price <- readLn :: IO Int
   pure (name, price)
 print $ sum $ map snd $ items
Супер, спасибо Вам🙏
источник

к

кана in Haskell
а, for нужно импортировать из Data.Traversable

в Prelude есть traverse, который как for, только в другом порядке аргументы

items <- traverse readItem [1..n]
источник

к

кана in Haskell
replicateM кстати тут мб даже лучше подходит чем for, если индексы не нужны

просто вместо replicateM_ нужен replicateM

_ на конце обычно означает что все результаты операции с эффектами отбрасываются, остаются только эффекты

items <- replicateM_ n do
 print "Enter item"
 a <- readLn
 b <- readLn
 pure (a, b)
источник

С

Сергей in Haskell
как можно собирать библиотеки с hackage без Cabal ?
источник