2017-11-15 13 views
-1

私はMLを使い慣れていますので、私は理解するために最善を尽くしています。ML機能を書いてください

alternate : 'a list -> 'a listというML関数を作成します。この関数は、同じ長さの2つのリストを入力として取り、1番目と2番目の入力リストから要素を交互に取った出力リストを生成します。

alternate ([1,3,5],[2,4,6]) = [1,2,3,4,5,6] 

これが私の仕事です:fun alternate (x::xs,y::ys) = x::alternate(x,y);

+0

[help/on-topic]から:* 3。宿題の助けを求める質問には、問題を解決するためにこれまでに行った作業の要約と、それを解決する難しさに関する説明が含まれていなければなりません。* – glennsl

+0

あなたが与えたタイプの署名リスト - > 'リスト')は残りの質問とは一致しません(これは( ''代替: 'リスト*'リスト - > 'リスト ')のように見えます。 :再帰的な場合は、2つの引数の順序の入れ替えを伴うことがあります。したがって、ある呼び出しで 'x'の役割を果たすものは、次に' y'の役割を果たし、逆の場合は '012'の役割を果たすでしょう。 –

答えて

1

次の2つの問題を分割:再帰的なケースとベースケースを。 (1)再帰的なケースでは、問題の単位を解決します。この場合、各リストから単一の要素を結果の前に置き、再帰的に同じ方法で問題の残りの部分を解決しようとします。 (2)基本ケースでは、リストは空であり、結果は空のリストになります。

fun alternate (x::xs, y::ys) = x::y::alternate(xs, ys) 
    | alternate ([], []) = [] 
    | alternate _ = raise Fail "xs and ys don't have the same length" 

(3)機能のみであっても長さの入力のために明確に定義されているので、一つは空であり、他方はなく、二組を含むリストと一致_キャッチオールパターン例外が発生する。

+0

詳細な説明をありがとう –

関連する問題