Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在F数组上应用函数_Arrays_F# - Fatal编程技术网

Arrays 在F数组上应用函数

Arrays 在F数组上应用函数,arrays,f#,Arrays,F#,您好,我正在尝试学习F中CPU绑定并行编程的基础知识。这里我有一个计算饮料价格的函数。我想要的是应用另一个函数,将结果乘以某个数字,再乘以我从并行计算中得到的结果,但是我不断得到类型不匹配的错误。在我的解决方案中,我得到的结果是一个锯齿状数组。不幸的是,我也不知道如何以数组的形式获得结果 我认为代码的第一个问题是grandTotal函数有两个参数: let grandTotal (dr:liquid ,cont:Containment) = function (*let temp =

您好,我正在尝试学习F中CPU绑定并行编程的基础知识。这里我有一个计算饮料价格的函数。我想要的是应用另一个函数,将结果乘以某个数字,再乘以我从并行计算中得到的结果,但是我不断得到类型不匹配的错误。在我的解决方案中,我得到的结果是一个锯齿状数组。不幸的是,我也不知道如何以数组的形式获得结果

我认为代码的第一个问题是grandTotal函数有两个参数:

let grandTotal (dr:liquid ,cont:Containment) = function
     (*let temp = {dra=dr;conta = cont} //supossed to search on menu list if such item exists (can't figure the syntax)
     if List.contains temp menuList then *)
    |CupDrink (s=z)  ->  findPricePrML dr * find z
    |BottledDrink (s=z)  ->  findPricePrML dr * find z
    |CannedDrink (s=z)  ->  findPricePrML dr * find z
    |_-> failwith "not found"
    (* else failwith "no such item exists"*)
   ;;

let source =  [|(CocaCola, bigBottle); (CocaCola, smallCup); (Tuborg, smallCup)|]

let Test =

    Async.Parallel [ async { return Array.map grandTotal source } ]
    |> Async.RunSynchronously
这意味着你必须用像grandTotal CocaCola,bigBottle drinkKind这样的名字来称呼它。但是,在尝试调用此函数的代码中,可以使用:

let grandTotal (dr:liquid, cont:Containment) = function
  | ...
这将只使用一个参数调用grandTotal—源列表中的一个项目,因此您将返回一个函数而不是价格。您可能需要以下内容:

Array.map grandTotal source
Array.map (fun drink -> grandTotal drink kind) source
第二个问题是,您并没有真正将任何东西并行化。按照使用异步的方式,您只需创建一个计算,然后在后台线程上运行该计算。你可以这样做:

Array.map grandTotal source
Array.map (fun drink -> grandTotal drink kind) source
但是,更有效、更简单的方法是使用Array.Parallel.map:

要回答您关于调用另一个函数的问题,如果没有看到我们可以运行的更完整的代码示例,这是不可能的

Array.Parallel.map (fun drink -> grandTotal drink kind) source