2010-11-23 23 views
2

私はSMLで基本的なリスト操作をしようとしています。リストを反復処理するにはどうすればよいですか?

リストの各要素を抽出し、その要素に文字列を追加してリストに追加したいとします。 例:

List : [A,B,C,D] 
String : A 
Final List: [AA,AB,AC,AD] 

がどのように私はSMLで、リスト内の各要素を反復処理することができますか? ^を使用して文字列を追加し、@を使用してリストを連結できますが、リストから各要素を抽出するにはどうすればよいですか?

マップや配列のようなものを使ってこれらのリスト値を保存し、SMLの別の関数に渡すこともできますか?

マップについての曖昧な情報があり、私たちがどのように使用できるかについての明確な情報はありません。これを行うには

答えて

1

2つの簡単な方法:

- fun addstring (x::xs) a = (a^x) :: addstring xs a 
= | addstring []  a = [] 
= ; 
val addstring = fn : string list -> string -> string list 
- addstring ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

上記のリストを破壊するためにパターンマッチングを使用して、操作を実行し、それが行くように再帰的に、再びリストを作成します。

- fun addstring2 xs a = map (fn x => a^x) xs; 
val addstring2 = fn : string list -> string -> string list 

- addstring2 ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

この1つは公平なビット単純ですが、それはマップを使用する方法を示しています(addstringで明示的な例よりも読み、おそらくほんの少し難しくなります。) - あなたは、ソースから各要素をマップする関数を指定しますターゲットドメインに、ソースドメイン内の要素のリストを与え、ターゲットドメイン内のリストを返します。

もちろん、これらはいずれもリストのインプレース更新を行わず、新しいリストを返します。

+0

このリストを実際に通過できるかどうか教えてください。上記の場合、リスト["AA"、 "AB"、 "AC"]を保持するのは 'a'ですか?関数の呼び出しでaddString関数が呼び出された場合、add関数に値が渡されますか? – JJunior

関連する問題