Printing Ocaml:打印int列表数组中的元素
我有一个创建状态的函数。国家的定义是:Printing Ocaml:打印int列表数组中的元素,printing,arraylist,ocaml,element,state,Printing,Arraylist,Ocaml,Element,State,我有一个创建状态的函数。国家的定义是: type state = graph * bool array;; 图表是: type graph = int list array;; 一个图是一个数组,在每个索引处都可能有一个int列表存储在该索引处 我有一个生成状态的函数,我正在尝试将状态中的元素打印到输出文件中 我对函数的定义如下: let state_of_graph (s:state) (out:out_channel) : unit = match s with (
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个元素)
状态本身既是一个图,也是一个布尔数组。我不知道从这里到底该做什么(实现)。我知道我必须做什么,那就是遍历我的图,然后打印出索引,后面是一个箭头,后面是单独的整数
但是我到底该怎么做呢?我忘记了大部分ocaml,很抱歉我没有编写代码:-) 数组和列表是否都有
映射
?如果是这样,映射到数组并返回index+“->”,在该映射中还附加映射到列表时得到的内容,将int转换为字符串并对其进行concat
这有帮助吗?您对数据结构的描述相当糟糕。例如,你写了“一个图形是一个数组,在每个索引处可能都有一个int列表存储在该索引处。”这几乎就是
type graph=int list array
的意思(事实上,每个索引处总是存储一个int列表),所以你的英语句子不会传递任何额外的信息。解释每个数组元素代表什么会更有用。既然你们在谈论图形,我猜它是类似于a.(I)
包含j
意味着从I
到j
有一条边
但是,由于您开始执行的任务是根据数据结构描述的,因此我想我理解您想要做什么
要迭代数组,有两种主要的可能性:为循环编写,或使用函数之一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\u节点
完成print\u图形
。您仍然需要打印索引和每行开头的箭头,并且仅当有索引时才打印一行。不要这样做!把你的问题原封不动地留下,这样人们仍然可以阅读。为了表明一个问题已经解决,只要将其中一个答案(最有帮助的一个)标记为已接受就足够了,就像你所做的那样。(如果您发现任何数量的答案至少部分有用,您也可以向上投票,方法是单击左侧数字上方的向上三角形。)
let print_node (l : int list) (out : out_channel) : unit =
List.iter (fun j -> print_char ' '; print_int j) l;;