2011-09-23 28 views
6

Evetod ile gelen hamlet şablonlama dili ile virgülle ayrılmış bir listeyi yazdırmanın en iyi yolu nedir?Virgülle virgülle ayrılmış liste nasıl yazdırılır?

E.g. bir girdiyi birbiri ardına basan bu kodu varsayalım, elemanlar arasına virgül nasıl ekleyebilirim? Böyle Template Toolkit olarak

The values in the list are 
$ forall entry <- list 
    #{entry} 
and that is it. 

Bazı şablon dilleri ilk veya son yinelemeyi saptamak için direktifler sağlar: Ya da belki hatta bir “ve” son girmesinden önce ekleyin.

cevap

5

Bunun gibi yerleşik bir şey olduğunu sanmıyorum. Neyse ki, Hamlet'in yardımcı işlevlerini kullanmak kolaydır. Örneğin, öğeleriniz düz dizelerse, aralarında virgül eklemek için yalnızca Data.List.intercalate'u kullanabilirsiniz.

The values in the list are 
#{intercalate ", " list} 
and that is it. 

Eğer meraklı şeyler yapmak isterseniz, Hamlet değerleriyle çalışmak için işlevler yazabilirsiniz. Örneğin, burada bir listede virgül ve Hamlet değerleri arasında "ve" ekleyen bir işlev var.

commaify [x] = x 
commaify [x, y] = [hamlet|^{x} and ^{y}|] 
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|] 

Bu başka bir bir Hamlet değeri eklemek için ^{...} sözdizimini kullanır. Şimdi, altı çizili kelimelerin virgülle ayrılmış bir listesini yazmak için kullanabiliriz. İşte

The values in the list are 
^{commaify (map underline list)} 
and that is it. 

, underline sadece düz metin daha ilginç bir şey üretmek için küçük bir yardımcı fonksiyonudur.

underline word = [hamlet|<u>#{word}|] 

İşlendiğinde, bu aşağıdaki sonucu verir.

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it. 
+0

Teşekkürler, bu iyi bir çözüm koleksiyonudur, ancak hiçbiri Template Haskell'in sağladığı kadar tatmin edici değildir. Belki de mezara "özel" bir döngü için bir yama göndermeliyiz. –

İlgili konular