我找不到从用户给出的值中获取列表的方法。我已经做了
# read_line() |> Str.split (Str.regexp " +") |> List.map int_of_string;;
但不知道如何为字符做同样的事情。
答案 0 :(得分:1)
请记住,字符串是char:
的数组 # let s = "ab";;
# s.[0];;
- : char = 'a'
因此,如果您必须为列表中的任何元素返回一个字符:
# read_line() |> Str.split (Str.regexp " +") |> List.map (fun x -> x.[0])
答案 1 :(得分:0)
从您之前的问题的上下文中,您似乎确实需要一种方法来解析包含描述状态机转换的整数和字符混合的文本。我建议您最好使用Scanf
模块。但是,如果你需要更复杂的东西,这可能需要一个手写扫描仪(你可以使用Str.string_match
或者 - 如果你愿意深入潜水 - 使用ocamllex
扫描仪生成器)。
使用Scanf从通道读取一行的简单示例如下:
let read_transition input =
try
let line = input_line input in
Scanf.sscanf line "%d %c %d"
(fun x ch y -> Some (x, ch, y))
with End_of_file -> None
请注意,我们正在使用input_line
读取该行,而不是直接在输入通道上使用Scanf.scanf
。原因是Scanf.scanf
可能需要一个前瞻性的角色,因此,如果您将其与其他阅读频道的方式混合,则可能会跳过字符。通过使用input_line
然后使用Scanf.sscanf
(而不是Scanf.scanf
),我们可以避免这种情况。
另请注意,根据输入的语法,您可能需要相应地调整scanf模式。