gpt4 book ai didi

f# - 变量是否可以在一系列管道运算符期间引用自身,F#

转载 作者:行者123 更新时间:2023-12-05 00:56:34 24 4
gpt4 key购买 nike

let sortStringAsKey (listOfWords : string array) = 
let temp = listOfWords
|> Array.map (fun word -> word.ToCharArray() |> Array.sort)
|> Array.map String
|> Array.zip listOfWords
temp

你好,

我已经写了一些这样的代码,它接受一个单词列表并对它们进行排序,但是它创建了一个这样的元组(originalWord,sortedWord);我希望元组看起来像这样(sortedWord,originalWord)。

我知道我们可以简单地完成 let 语句然后做
let newTemp = Array.zip temp |> listOfWords

但我想知道是否有办法以某种方式反转 curry 参数,以便首先应用函数中的第一个参数。这将让我在不使用另一个 let 语句的情况下完成它。

编辑:

我在想的是,不知何故......如果我可以引用'temp',我可以将自己用作zip或其他东西的第一个参数......尽管我知道这行不通,因为它只能使用1个函数并且它就用它自己拉上 zipper 吧。

最佳答案

您可以将输入通过管道传输到 lambda 表达式中:

let temp = listOfWords 
|> Array.map (fun word -> word.ToCharArray() |> Array.sort)
|> Array.map String
|> (fun sorted -> Array.zip sorted listOfWords)

或者你可以概括这一点,让自己成为一个函数来反转另一个函数的参数。此类函数传统上称为 flip :
let flip f a b = f b a

let temp = listOfWords
|> Array.map (fun word -> word.ToCharArray() |> Array.sort)
|> Array.map String
|> (flip Array.zip) listOfWords

顺便说一句,我个人会这样做:
let pairWithSorted word = 
let sorted = word |> Seq.sort |> Seq.toArray |> String
sorted, word

let temp = listOfWords |> Array.map pairWithSorted

真的不需要 zip ,不需要 ToCharArray , 因为 stringIEnumerable<char> .

关于f# - 变量是否可以在一系列管道运算符期间引用自身,F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36108924/

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