gpt4 book ai didi

.net - 在单行中在 F# 中生成一系列点

转载 作者:行者123 更新时间:2023-12-04 16:34:20 24 4
gpt4 key购买 nike

我发现自己经常实现相同的 (x, y)图案:

let rectangleSizes = seq {
for w = 1 to width do
for h = 1 to height do
yield (w, h)
}

碰巧不会有一个简单的单线吗?当然,我可以只在一行中编写这个完全相同的函数,但我觉得它的可读性会受到很大影响:
let rectangleSizes = seq { for w = 1 to width do for h = 1 to height do yield (w, h) }

最佳答案

如果我一直进行初始化,我将定义自己的运算符:

let (..) (x0,y0) (xn,yn) =  
seq {
for x = x0 to xn do
for y = y0 to yn do
yield (x, y)}

let rectangleSizes = {(1,1) .. (5,7)}

但这掩盖了原来的 (..)运算符,但是您可以使用其他运算符名称或函数。还有一个 trick以避免掩盖原始运算符定义。

或者,如果您使用实现 Applicative Functors 的库,例如 F#+您可以在一行中将其定义为:
let rectangleSizes = (fun x y -> (x, y)) <!> {1..width} <*> {1..height}

注意:函数 fun x y -> (x, y)通常称为 tuple2
#r @"FsControl.Core.dll"
#r @"FSharpPlus.dll"

open FSharpPlus
let tuple2 a b = (a,b)
let width, height = 5,7

let rectangleSizes = tuple2 <!> {1..width} <*> {1..height}

关于.net - 在单行中在 F# 中生成一系列点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192588/

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