當我運行以下代碼時:
main = do
let smallTriplets xs ys zs = [ (x, y, z) | x <- xs, y <- ys, z <- zs, let sum = x y z, sum <= 10]
print (smallTriplets [1,2] [3,4] [5,6])
它給出了輸出:
[(1,3,5),(1,3,6),(1,4,5),(2,3,5)]
但是,我想smallTriplets列印sum一些自定義。更具體地說,如果我可以用一些代碼替換let sum = x y zin會更好smallTriplets,以便它提供如下輸出:
Sum is 1 3 5 = 9
Sum is 1 3 6 = 10
Sum is 1 4 5 = 10
Sum is 2 3 5 = 10
我希望該代碼具有類似的字串"Sum is " show(x) " " show(y) " " show(z) " = " show(x y z) "\n"
我怎樣才能做到這一點?
如果這是不可能的,那么請告訴我如何列印:
Sum is 1 3 5 = 9
Sum is 1 3 6 = 10
Sum is 1 4 5 = 10
Sum is 2 3 5 = 10
uj5u.com熱心網友回復:
寫"Sum is " show x " " show y " " show z " = " show sum而不是有什么問題(x, y, z)?
你可以喜歡這個
main = do
let helper x y z s = "Sum is " show x " " show y " " show z " = " show s
let smallTriplets xs ys zs = [ helper x y z sum | x <- xs, y <- ys, z <- zs, let sum = x y z, sum <= 10]
putStr $ unlines $ smallTriplets [1,2] [3,4] [5,6]
在這里,smallTriplets回傳 a[String]而不是 a [(,,)]; unlines將 轉換為[String]嵌入Strings\n的 a;最后,putStr列印字串。
這是一個快速而骯臟的解決方案,它會改變功能smallTriplets,所以如果您計劃以其他方式使用原始結果,這個解決方案將無濟于事。
如果您的目標是記錄您所做的事情,那么需要一個更復雜的解決方案。也許使用作家單子?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528520.html
標籤:哈斯克尔列表理解
上一篇:Haskell:對于陣列中的每個偶數出現,將一個int連接到最終串列
下一篇:特定型別結構的合并演算法
