F# 将函数应用于列表的元素,同时使用函数';他的结果是正确的

F# 将函数应用于列表的元素,同时使用函数';他的结果是正确的,f#,c#-to-f#,F#,C# To F#,当条件为true时,我需要遍历一个列表。我是通过下面的函数iterc完成的: let data = [12; 3; 4; 56; 7] let restriction = 146 let convert elem = pown elem 2 + 1 let rec iterc (cond : ('T -> bool)) (action : ('T -> unit)) (list : 'T list) = match list with | head::tail -&

当条件为true时,我需要遍历一个列表。我是通过下面的函数
iterc
完成的:

let data = [12; 3; 4; 56; 7]
let restriction = 146
let convert elem = pown elem 2 + 1

let rec iterc (cond : ('T -> bool)) (action : ('T -> unit)) (list : 'T list) =
    match list with
    | head::tail ->
        match (cond head) with
        | true ->
            action head
            iterc cond action tail
        | false -> ()
    | [] -> ()

iterc ((>) restriction << convert)
      (printfn "%A" << convert)
      data

> 145
  10
  17
let data=[12;3;4;56;7]
设限制=146
让转换元素=功率元素2+1
let rec iterc(cond:('T->bool))(action:('T->unit))(list:'T list)=
匹配列表
|头:尾->
将(连接头)与
|正确->
动作头
iterc条件作用尾
|假->()
| [] -> ()
iterc((>)限制现有的F#函数似乎可以满足您的需要。
你可以这样写上面的大部分内容:

let data = [12; 3; 4; 56; 7]
let restriction = 146
let convert elem = pown elem 2 + 1

for value in data |> Seq.map convert |> Seq.takeWhile ((>) restriction) do
    printfn "%A" value
现有的F#函数似乎可以满足您的需要。
你可以这样写上面的大部分内容:

let data = [12; 3; 4; 56; 7]
let restriction = 146
let convert elem = pown elem 2 + 1

for value in data |> Seq.map convert |> Seq.takeWhile ((>) restriction) do
    printfn "%A" value

您尝试的解决方案是否应该忽略7的数据点?我假设不是。Squimmy发布的解决方案有一个错误,因为它使用
Seq.takeWhile
而不是
Seq.filter
Seq.where
。您可能需要的是以下内容:

let data = [12; 3; 4; 56; 7]
let restriction = 146
let convert elem = pown elem 2 + 1

data |> List.map (fun value -> convert value ) 
     |> List.filter (fun value -> value < restriction) 
     |> List.iter(fun value -> printfn "%A" value)

您尝试的解决方案是否应该忽略7的数据点?我假设不是。Squimmy发布的解决方案有一个错误,因为它使用
Seq.takeWhile
而不是
Seq.filter
Seq.where
。您可能需要的是以下内容:

let data = [12; 3; 4; 56; 7]
let restriction = 146
let convert elem = pown elem 2 + 1

data |> List.map (fun value -> convert value ) 
     |> List.filter (fun value -> value < restriction) 
     |> List.iter(fun value -> printfn "%A" value)

最后一个
List.map
应该是
List.iter
@Ringil是的,我想忽略7的值。我查看了
List
模块,没有猜到有
Seq.takeWhile
。最终版本是:
data |>List.map(convert)|>Seq.takeWhile((>)限制)|>Seq.iter(printfn“%A”)
似乎应该是
data |>Seq.map(convert)|>Seq.takeWhile(>)restriction)|>Seq.iter(printfn“%A”)
以防止不必要的计算。最后一个
List.map
可能应该是
List.iter
@Ringil是的,我想忽略7的值。我查看了
List
模块,没有猜到有
Seq.takeWhile
。最终版本是:
data |>List.map(convert)|>Seq.takeWhile(>)限制)|>Seq.iter(printfn“%A”)
似乎应该是
data |>Seq.map(convert)|>Seq.takeWhile(>)限制|>Seq.iter(printfn“%A”)
以防止不必要的计算。谢谢,但您在使用curry时有一个bug-应该是
(>)限制)
谢谢,@Feofilakt,我已经编辑了答案以使用正确的运算符。谢谢,但是您的咖喱有一个错误-应该是
(>)限制)
谢谢,@Feofilakt,我已经编辑了答案以使用正确的运算符。