2017-02-21 6 views
2

だから私は、入力リストにls[l1, l2, ..., ln]と出力文字列例えば"[" ++ (f l1) ++ "," ++ (f l2) ++ "," ++ ... ++ (f ln) ++ "]"Haskellはリスト上の入力機能を実行するために関数を記述

flist :: (a -> String) -> [a] -> String 
flist f ls = 

入力機能fを実行する関数の書き込みをしようとしている:

>flist show [1, 2, 3] 

だろう出力"[1, 2, 3]"

>flist (fun x -> x) ["dog"] 

でしょう私が働いているように思われませんfoldlの「

flist f ls = "[" ++ (foldl' (++) f "," ls) ++ "]" 

を使用しようとした"[dog]"

出力

答えて

6

ヒント:

  1. プロデュース[f x1,...,f xn]ごとにfを適用し、最初メンバー。
  2. 次に、[y1,...,yn]wをとり、インターリーブを[y1,w,y2,w,...,yn]とする関数を記述します。これは再帰によって行うことができます。 (それにはライブラリ関数もありますが、それは重要ではありません)
  3. [f x1, ",", ...]を取得して連結します。
  4. 結果の文字列に角括弧を追加します。これについて
5

方法:

import Data.List 

flist f list = "[" ++ (intercalate "," $ map f list) ++ "]" 

intercalateは、それが(この場合は)a slightly configurable version of unwordsあり、他の文字列の間で文字列を置きます。

関連する問題