如何处理 OCAML 列表的元素?
How to process elements of an OCAML list?
我想处理文件“persons.txt”中的数据。
但是我已经尝试了一切来处理文本文件中的所有行。
我处理数据的唯一方法是手动创建列表。
let myList = ["John";"23"]
我希望程序遍历文本文件的所有行。
我设法将文本文件的所有内容传递到列表中,但我似乎无法从那个阶段继续前进。
我的思路是:
- 从文本文件中读取内容
- 转换为 OCaml 列表
- 将列表分成子列表
- 遍历子列表
- 只打印符合条件的屏幕文本
你能指导我吗?
谢谢!!
open Printf
(* FILE CONTENTS *)
(*
John;23;
Mary;16;
Anne;21;
*)
let file = "data/persons.txt"
;;
(* READ FROM EXTERNAL FILE *)
let read_lines name : string list =
if Sys.file_exists (name) then
begin
let ic = open_in name in
try
let try_read () =
try Some (input_line ic) with End_of_file -> None in
let rec loop acc = match try_read () with
| Some s -> loop (s :: acc)
| None -> close_in_noerr ic; List.rev acc in
loop []
with e ->
close_in_noerr ic;
[]
end
else
[]
;;
(...)
你的问题一点都不清楚。以下是一些观察结果:
首先,您的 read_lines
函数没有 return 您需要的形式的输入。
什么 read_lines
return 看起来像这样:
["John;23;"; "Mary;16;"; "Anne;21;"]
但你想要的更像这样:
[("约翰", "23)"; (“玛丽”,“16”); (“安妮”,“21”)]
这里的关键是使用 ;
作为分隔符将字符串拆分成多个部分。您可以为此使用 String.split_on_char
。
其次,您没有定义函数来计算参数的答案。相反,您的计算基于全局变量。这不会一概而论。
而不是这样说:
let adult_check_condition =
... using global age and name ...
您需要定义一个函数:
let adult_check_condition age name =
... use parameters age and name ...
然后你可以用不同的年龄和名字来调用这个函数
我想处理文件“persons.txt”中的数据。 但是我已经尝试了一切来处理文本文件中的所有行。
我处理数据的唯一方法是手动创建列表。
let myList = ["John";"23"]
我希望程序遍历文本文件的所有行。 我设法将文本文件的所有内容传递到列表中,但我似乎无法从那个阶段继续前进。
我的思路是:
- 从文本文件中读取内容
- 转换为 OCaml 列表
- 将列表分成子列表
- 遍历子列表
- 只打印符合条件的屏幕文本
你能指导我吗?
谢谢!!
open Printf
(* FILE CONTENTS *)
(*
John;23;
Mary;16;
Anne;21;
*)
let file = "data/persons.txt"
;;
(* READ FROM EXTERNAL FILE *)
let read_lines name : string list =
if Sys.file_exists (name) then
begin
let ic = open_in name in
try
let try_read () =
try Some (input_line ic) with End_of_file -> None in
let rec loop acc = match try_read () with
| Some s -> loop (s :: acc)
| None -> close_in_noerr ic; List.rev acc in
loop []
with e ->
close_in_noerr ic;
[]
end
else
[]
;;
(...)
你的问题一点都不清楚。以下是一些观察结果:
首先,您的 read_lines
函数没有 return 您需要的形式的输入。
什么 read_lines
return 看起来像这样:
["John;23;"; "Mary;16;"; "Anne;21;"]
但你想要的更像这样:
[("约翰", "23)"; (“玛丽”,“16”); (“安妮”,“21”)]
这里的关键是使用 ;
作为分隔符将字符串拆分成多个部分。您可以为此使用 String.split_on_char
。
其次,您没有定义函数来计算参数的答案。相反,您的计算基于全局变量。这不会一概而论。
而不是这样说:
let adult_check_condition =
... using global age and name ...
您需要定义一个函数:
let adult_check_condition age name =
... use parameters age and name ...
然后你可以用不同的年龄和名字来调用这个函数