2016-09-10 2 views
2

関数型プログラミングを学びたいので、F#でマージソートを実装しようとしています。しかし、私はこの補助機能のマージに問題があります。うまくいけば、誰かが正しい方向に私を指すことができます。私はF#の初歩的な理解しか持っていないことに留意してください。F#での順序付きリストのマージ、 'a - > a'リストの取得を期待する

let rec merge a b = 
match a, b with 
|q, [] -> q 
|[], p -> p 
|q::q', p::p' when q<p -> q::merge q' p::p' 
|q::q', p::p' when p<q -> p::merge q::q' p';; 

merge [1;3;5;7;9] [2;4;6;8;10];; 

コンソール出力:

Uge2.fsx(96,34): error FS0001: Type mismatch. Expecting a 
'a  
but given a 
'a list  
The resulting type would be infinite when unifying ''a' and ''a list' 
> 

Uge2.fsx(99,1): error FS0039: The value or constructor 'merge' is not defined 

は、コードに関する任意の提案を歓迎以上です。ご協力いただきありがとうございます!

答えて

4

q :: merge q' p :: p'(q :: (merge q' p)) :: p'pタイプが'a(いくつかのこと)の両方でなければならないことを意味し

'a list(それらのもののリスト)

何が本当にしたいことはあるとして理解されてq :: merge q' (p :: p')
か見てそのp :: p'b

0を書き換えることができます。
+0

理にかなう!本当にありがとう。私はaとbが範囲内にあることに気付かなかった。 – Sebastian

+0

@セバスチャンIMHO [F#for Fun&Profit](https://fsharpforfunandprofit.com/troubleshooting-fsharp/)には便利な情報がたくさん入っています – Sehnsucht

+0

確かにそうなります! – Sebastian

関連する問題