gpt4 book ai didi

list - F# 一次将函数应用于两个列表

转载 作者:行者123 更新时间:2023-12-04 13:48:29 24 4
gpt4 key购买 nike

我只是自己跳入 F#,翻译一个简单的金融工具作为练习。我还在等邮件中的引用书。这是我认为 F# 可以用不止一种巧妙的方式完成的事情,但我无法克服语法错误。

我有一个名为 Delta 的函数用于期权估值,我想将它应用于两个(平行的)输入值列表:

let Delta f k v t r = exp(-r * t) * CDF(D1 f k v t)

let priceList = [100.0; 98.0; 102.0; 100.0] //f
let strike = 100.0 //k
let vol = 0.30 //v
let timeList = [1.0; 0.9; 0.8; 0.7] //t
let rt = 0.005 //r

所以这个函数是递归过程的一部分(使用牛顿法)。我很乐意生成相同长度的增量列表 [d1; d2; d3; d4] [编辑:我坚持使用增量列表作为期望的结果]。我正在寻找巧妙的 F# 方法——一口气——使用列表函数。我试图将这个 Delta 函数硬塞进这个基本模式中:

  let sumList = List.map2 (fun x y -> x + y) list1 list2

(似乎许多列表函数可以让我得到一个 Delta 列表或 Delta 列表的总和。)我不会接近猜测合法语法。我也尝试过“Match head::tail”模式。

编辑:我在这里对我的要求犹豫不决,因为我在所有列表中游了一点。对我来说是新的功能。让我专注于自己:我能否将 (Delta f k v t r) 应用为 (Delta priceList strike vol timeList rt) 并生成 deltaList,其中价格、时间和增量都具有相同的长度?

最佳答案

正如其他人在评论中指出的那样,您的问题并不完全清楚 - 如果您给出了您想要获得的输入和输出的具体示例,那么回答起来会更容易。

就是说,如果您想使用各种值作为参数调用 Delta,那么您需要做两件事。大多数参数只是普通值,因此您可以直接传递; priceListtimeList 是集合,因此我假设您要计算其所有元素的 Delta。为此,您可以使用 Seq.zipSeq.map:

Seq.zip priceList timeList 
|> Seq.map (fun (f, t) -> Delta f strike vol t rt)

关于list - F# 一次将函数应用于两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138939/

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