3

値のリストを操作する Haskell 関数を作成していByteStringます。最初と最後の項目で別の操作を行う必要があります (リストに項目が 1 つしかない場合は同じかもしれません)。

具体的には、次のことを書きたいと思います。

  "item-1\
  \item-2\
  \item-3\
  ...
  \item-n"

whereitem-1は、二重引用符で始まりitem-nバックスラッシュで終わり、バックスラッシュで始まり二重引用符で終わります。との間のすべての項目は、バックスラッシュitem-1で開始および終了します。いくつかのコード生成のためにitem-n、base64 でエンコードされた値を Haskell として発行しています。String元の (長い) base64 エンコードByteStringを、それぞれ 64 文字の長さのチャンクに分割しました。

4

4 に答える 4

11

私の質問がばかげていることに気づきました。

intercalateアイテムの間に を挿入してから"\\\n\\"、二重引用符を前に追加して追加するために使用できます。

import qualified Data.ByteString.Lazy.Char8 as L
(L.pack "\"") `L.append` (L.intercalate "\\\n\\" items) `L.append` (L.pack "\"")

出力例:

"H4sIAAAAAA\
\AAA2NgAAMm\
\CMXA7JRYxI\
\Am5JafD2Uy\
\AgDvdHs6Lg\
\AAAA==\
\"
于 2013-01-01T20:52:06.347 に答える
2

次を使用してリストを分割することも検討できます。

  • リストの最初の要素を取得するための「head」
  • リストの最初の要素を除くすべてを取得する「tail」
  • リストの最後の要素を除くすべてを取得する「init」
  • リストの最後の要素を取得する「last」

だから[head a] ++ init (tail a) ++ [last a] == a

そうすれば、リストの最初と最後の要素を個別に変更し、「init」部分に関数をマップできます。

于 2013-01-01T23:00:18.190 に答える