list comprehension in F#

后端 未结 1 930
小鲜肉
小鲜肉 2020-12-17 09:30

I am trying to do some list comprehension in F#. And I found this.

let evens n =
    { for x in 1 .. n when x % 2 = 0 -> x }
print_any (evens 10)

let sq         


        
相关标签:
1条回答
  • 2020-12-17 10:05
    • Nested for loops require a do.

    • You need to use seq {..}. The form {..} without seq doesn't work anymore.

    • A when guard in a for loop pattern is also not supported anymore.

    • print_any something is deprecated. Use printf "%A" something instead.

    This code should work:

    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)
    

    You can still use the -> if all you want to do is return a single value:

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

    By the way, I find it interesting to see how F# evolved over time. Too bad the early adopters have partially outdated books on their shelves (not that I mind).

    0 讨论(0)
提交回复
热议问题