gpt4 book ai didi

printing - Ocaml:打印出 int 列表数组中的元素

转载 作者:行者123 更新时间:2023-12-02 19:14:25 24 4
gpt4 key购买 nike

我有一个创建状态的函数。状态定义为:

type state = graph * bool array;;

图表是:

type graph = int list array;;

图是一个数组,每个索引处可能存储一个 int 列表。

我有一个创建状态的函数,我正在尝试将状态中的元素打印到输出文件中。

我定义的函数如下:

let state_of_graph (s:state) (out:out_channel) : unit = 
match s with
(g, b)

我基本上想迭代我的图表(g)并打印出索引以及 int 列表中的每个元素(如果元素存在,否则不打印出空元素)。

我想用以下方式打印它们:(考虑到索引 0 有 2 个元素)

index0 -> element1 
index 0-> element2

1 -> 2 3

状态本身既是一个图又是一个 bool 数组。我对从这里到底要做什么(实现)感到困惑。我知道我必须做什么,即迭代我的图表,并打印出索引,后跟一个箭头,后跟单独的整数。

但是我到底该怎么做呢?

最佳答案

您对数据结构的描述相当糟糕。例如,您可以编写“图形是一个数组,并且在每个索引处可能存储有一个 int 列表”。嗯,差不多就是这样type graph = int list array意味着(事实上,每个索引处总是存储一个 int 列表),所以你的英语句子不会传达任何额外的信息。解释每个数组元素代表什么会更有用。既然你在谈论图表,我想它就像 a.(i)包含j意味着 i 有一个优势至j

但是,由于您要执行的任务是用数据结构来描述的,所以我想我明白您想要做什么。

要迭代数组,主要有两种可能性:写 for循环,或使用函数 Array.iter 之一或Array.iteri 。此任务似乎非常适合Array.iteri因为您只是遍历数组并且需要知道索引。

let print_graph (g, a : state) (out : out_channel) : unit =
Array.iteri (fun i l -> …) g;;

好的,现在我们需要知道如何处理每个数组元素。每个元素都是一个整数列表:l类型为 int list 。从示例输出中,您只想按顺序输出列表元素,中间有一个空格。要按顺序迭代列表的元素,标准库函数 List.iter刚刚好。

let print_node (l : int list) (out : out_channel) : unit =
List.iter (fun j -> print_char ' '; print_int j) l;;

您现在应该可以使用print_node完成print_graph 。您仍然需要在每行开头打印索引和箭头,并且仅在存在索引时才打印行。

关于printing - Ocaml:打印出 int 列表数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761130/

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