首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用哈姆雷特中的分隔符分隔输出列表元素

用哈姆雷特中的分隔符分隔输出列表元素
EN

Stack Overflow用户
提问于 2015-08-07 06:55:24
回答 2查看 77关注 0票数 1

如果我有下面的代码,如何去掉输出中的最后一个逗号?有没有办法看到我在循环中的位置,以及我是否在终点?

代码语言:javascript
复制
{-# 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。当然是任意的名单。请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 07:33:35

您可以使用intersperse函数:

代码语言:javascript
复制
{-# 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}
                              |] ()

这将产生这样的结果:

代码语言:javascript
复制
ONE,2,3

请注意,intersperse将在列表之间插入中间,。因此,在哈姆雷特准商城中,您只需显示列表:

代码语言:javascript
复制
λ> intersperse "," $ map show [1,2,3]
["1",",","2",",","3"]
票数 1
EN

Stack Overflow用户

发布于 2015-08-07 07:33:12

我认为您必须在Haskell方面实现这种逻辑,例如:

代码语言:javascript
复制
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>标记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31871425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档