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;;