2009-12-11 13 views
19

F#でリストの理解をしようとしています。そしてthisが見つかりました。F#でのリストの理解

最初は正常ですが、2番目は古いです。最新(1.9.7.8)のF#コンパイラはこのスタイルをサポートしていません。私はこれが

let vec1 = [1;2;3] 
let vec2 = [4;5;6] 
let products = [for x in vec1 do for y in vec2 do yield x*y] 

を働く見つけ、いくつかの検索の後

は誰かのポイントは、なぜ構文が変更することはできますか?ありがとう。

答えて

20
  • ネストされたforループは、doが必要です。

  • seq {..}を使用する必要があります。 seqのないフォーム{..}はもう動作しません。

  • whenガードの中でforループパターンもサポートされていません。

  • print_any somethingは推奨されていません。代わりにprintf "%A" somethingを使用してください。

このコードは動作するはずです:あなたがしたいすべてが単一の値を返すされている場合

let evens n = 
    seq { for x in 1 .. n do if x%2=0 then yield x } 
printf "%A" (evens 10) 

let squarePoints n = 
    seq { for x in 1 .. n do 
      for y in 1 .. n -> x,y } 
printf "%A" (squarePoints 3) 

あなたはまだ->を使用することができます:ところで

let vec1 = [1;2;3] 
let vec2 = [4;5;6] 
let products = [for x in vec1 do for y in vec2 -> x*y] 

を、私は見つけます時間の経過とともにF#がどのように進化したかを知ることは興味深い。初期の採用者は、あまりにも時代遅れの書籍を棚に置いています(私は気にしていません)。

+2

まあ、初期の採用者はその時点で多くの選択肢がありませんでした:) – Benjol

+3

私たちも早期に著者を採用しませんでした。 ;-) –