0

我仍在尝试解决字符串格式的问题,但似乎无法正常工作。

我有两个函数可以输出整数,因为它们只是计算,我想在第三个和新输出中创建一个包含这两个计算的字符串,并让它变得漂亮漂亮。我想以表格(列和行)的形式呈现它。

到目前为止我正在尝试的是:

   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 只取用户给定的两个整数并对它们进行简单的计算,返回一个值。至少我让那些像魅力一样工作的人。:)

任何人都知道我哪里出错了?!?有没有人可以指出我正确的方向?

任何和所有的想法和建议都将不胜感激,我整个周末都在这:/

//问候

4

2 回答 2

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])

您可能需要查看一两个教程以了解语法。

于 2012-09-09T21:53:55.903 回答
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)]
于 2012-09-10T01:15:58.880 回答