我们的目标是建立一个程序,以人类可读的格式报告特定股票的交易。例如,对于我们的测试数据集,股票VTI的交易将打印为:
Bought 100 units of VTI for 1104 pounds each on day 1
Bought 50 units of VTI for 1223 pounds each on day 5
Sold 150 units of VTI for 1240 pounds each on day 9
下面是测试事务代码:
type Transaction = (Char, Int, Int, String, Int)
test_log :: [Transaction]
test_log = [('B', 100, 1104, "VTI", 1),
('B', 200, 36, "ONEQ", 3),
('B', 50, 1223, "VTI", 5),
('S', 150, 1240, "VTI", 9),
('B', 100, 229, "IWRD", 10),
('S', 200, 32, "ONEQ", 11),
('S', 100, 210, "IWRD", 12)
]
为此,我认为最好将每个部分拆分为切片,在最后可以将它们连接起来。
--Converting transaction to string
transaction_to_string :: Transaction -> String
transaction_to_string (action: units: stocks: price: day) =
let display = action ++ "Bought"
slice1 = units ++ "of"
slice2 = stocks ++ "for"
slice3 = price ++ "on day"
slice4 = day
in
slice1 ++ slice2 ++ slice3 + slice4
我收到的错误是这样的。它给出了一个类型错误,但我不确定为什么,因为在顶部使用的类型函数:
• Couldn't match type ‘[Char]’ with ‘Char’
Expected: [Char]
Actual: [[Char]]
• In the second argument of ‘(++)’, namely ‘slice4’
In the second argument of ‘(++)’, namely ‘slice3 ++ slice4’
In the second argument of ‘(++)’, namely
‘slice2 ++ slice3 ++ slice4’
|
| slice1 ++ slice2 ++ slice3 ++ slice4
2条答案
按热度按时间olhwl3o21#
第一次尝试:
您可以通过以下方法来改善此问题:
display
,可以使用如下代码:kkbh8khc2#
假设
Transaction
不是一个类型同义词,理想情况下,你应该让它成为Show
的一个示例。现在: