gpt4 book ai didi

F#中的列表理解

转载 作者:行者123 更新时间:2023-12-03 12:49:09 24 4
gpt4 key购买 nike

我正在尝试在 F# 中进行一些列表理解。我找到了 this .

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

let squarePoints n =
{ for x in 1 .. n
for y in 1 .. n -> x,y }
print_any (squarePoints 3)

第一个仍然可以正常工作,但第二个已经过时了。最新的 (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]

有人能指出为什么语法改变了吗?谢谢。

最佳答案

  • 嵌套 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# 如何随着时间的推移而发展很有趣。太糟糕了,早期采用者的书架上有部分过时的书籍(我不介意)。

    关于F#中的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888451/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com