gpt4 book ai didi

stream - 如何使用 Stream.iter 在 OCaml 中处理来自标准输入的行

转载 作者:行者123 更新时间:2023-12-01 23:59:59 25 4
gpt4 key购买 nike

我试图在 OCaml 中以面向行的方式处理来自标准输入的数据,但我无法使用 Stream.iter 来排列类型。我在 OCaml 网站 ( http://ocaml.org/learn/tutorials/streams.html ) 上找到了以下代码片段:

let line_stream_of_channel channel =
Stream.from
(fun _ ->
try Some (input_line channel) with End_of_file -> None)

使用它,我编写了一个简单的函数来读取一行并执行一些操作,然后打印一些数据。我将省略细节,因为我相信该功能运行良好。不过,它应该具有类型 string -> unit,就像(例如)print_endline,无论我是否通过,我从编译器得到的错误都是一样的我的函数或 print_endlineStream.iter

调用如下:

let read_data =
Stream.iter ~f:print_summary (line_stream_of_channel In_channel.stdin)

我从编译器得到的错误是这样的:

Error: The function applied to this argument has type 'a Stream.t -> unit
This argument cannot be applied with label ~f

我过去使用 Stream.iter 没有任何问题。令人困惑的是,它认为 print_endline 的类型是 'a Stream.t -> unit - 它应该是 string -> unit,对吗?

最佳答案

类型为'a Stream.t -> unit 的函数是Stream.iter。基本上,编译器告诉您 Stream.iter 没有任何命名参数。您正试图向它传递一个名为 f 的参数,这就是问题所在。

解决方案是删除~f:。 (我没有测试,因为我没有你的代码。)

关于stream - 如何使用 Stream.iter 在 OCaml 中处理来自标准输入的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976967/

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