我仍在尝试用字符串格式解决我遇到的问题,而我似乎无法使其正常工作。
我有两个函数可以让我输出Integers,因为它们只是计算,我想在第三个和新的输出中创建一个带有这两个计算的字符串并使它变得漂亮和漂亮。我想像桌子(colums和rows)一样呈现它。
到目前为止我所尝试的是:
tableShow :: Int -> Int -> String
tableShow n 0 = putStrLn (n power1 power2)
tableShow n k
| let list_k = [0..k]
| k > 0 = show(unlines[n ++ "\t" calc1 x k ++ "\t" ++ "\t" ++ calc2 x k | x <- list_k])
calc1和calc2只取两个用户给出的整数并对它们进行简单的计算,返回一个值。至少我让那些像魅力一样的工作。 :)
任何人都知道我哪里出错了?!?有人能指出我正确的方向吗?
我将非常感谢任何和所有的想法和建议,我现在整个周末都在这里:/
//问候
答案 0 :(得分:4)
tableShow :: Int -> Int -> String
tableShow n 0 = putStrLn (n power1 power2)
tableShow n k
| let list_k = [0..k]
| k > 0 = show(unlines[n ++ "\t" calc1 x k ++ "\t" ++ "\t" ++ calc2 x k | x <- list_k])
您没有提到您的问题是错误还是您的功能无法按预期运行,但您的let
绑定语法已关闭,而您错过了++
。我不知道你对n power1 power2
的意图,但我猜你想要乘法。它应该是:
tableShow :: Int -> Int -> String
tableShow n 0 = putStrLn (n * power1 * power2)
tableShow n k
| k > 0 = let list_k = [0..k] in
show(unlines[n ++ "\t" ++ calc1 x k ++ "\t" ++ "\t" ++ calc2 x k | x <- list_k])
您可能需要查看一两个教程才能获得语法。
答案 1 :(得分:2)
要将像Ints这样的基本值转换为字符串,请使用show。
multMsg x y = "The product of " ++ show x ++ " and " ++ show y ++ " is " ++ show (x*y)
我通常在这种情况下使用concat。
multMsg2 x y = concat ["The product of ", show x, " and ", show y, " is ", show (x*y)]