如果我有下面的代码,如何去掉输出中的最后一个逗号?有没有办法看到我在循环中的位置,以及我是否在终点?
{-# LANGUAGE QuasiQuotes #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet (hamlet)
main = do
let xs = [1 :: Int, 2, 3]
putStrLn $ renderHtml $ [hamlet|
$forall x <- xs
$if x == 1
ONE,
$else
#{x},
|] ()这会产生ONE,2,3,,我需要ONE,2,3。当然是任意的名单。请帮帮忙。
发布于 2015-08-07 07:33:35
您可以使用intersperse函数:
{-# LANGUAGE QuasiQuotes #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet (hamlet)
import Data.List (intersperse)
main = do
let xs = intersperse "," $ map show [1 :: Int, 2, 3]
putStrLn $ renderHtml $ [hamlet|
$forall x <- xs
$if x == "1"
ONE
$else
#{x}
|] ()这将产生这样的结果:
ONE,2,3请注意,intersperse将在列表之间插入中间,。因此,在哈姆雷特准商城中,您只需显示列表:
λ> intersperse "," $ map show [1,2,3]
["1",",","2",",","3"]发布于 2015-08-07 07:33:12
我认为您必须在Haskell方面实现这种逻辑,例如:
import Data.List (intercalate)
main = do
let xs = [1 :: Int, 2, 3 ]
str = intercalate "," $ map fmt xs
fmt 1 = "ONE"
fmt x = show x
... [hamlet| #{str}] ...一些以特殊方式处理序列的第一个或最后一个元素的视觉效果也可以使用CSS来实现,即使用<ul>和<li>标记。
https://stackoverflow.com/questions/31871425
复制相似问题