任何人都可以告诉我们如何在OCaml中打印Stack数据结构? 内置Stack类型定义如下:
type 'a t = { mutable c : 'a list }
exception Empty
let create () = { c = [] }
let clear s = s.c <- []
let push x s = s.c <- x :: s.c
let pop s = match s.c with hd::tl -> s.c <- tl; hd | [] -> raise Empty
let length s = List.length s.c
let iter f s = List.iter f s.c
想要打印并保留其元素,这意味着不要使用pop
和push
。
最好使用模式匹配来解决问题。
代码应该是:
let print_stack stack =???
答案 0 :(得分:3)
看起来这可能是家庭作业。你应该展示你尝试过的不起作用的东西,并解释为什么你认为它不起作用。只要有人给你答案,这就更有价值了。
如果不是作业:如果你考虑一下,你可以在标准库的另一个地方找到一个好的实现。 Stack.iter
的实现会告诉您在哪里查看。
答案 1 :(得分:1)
似乎函数Stack.iter
完全符合您的要求:
let print_stack print_elem stack = Stack.iter print_elem
其中。 print_elem
打印堆栈的一个元素。
e.g。 let print_elem_int n = (print_int n; print_newline ())
答案 2 :(得分:0)
最后得到答案:
let rec print_s {c=l}=
match l with
| [] -> raise Empty
| [x] -> print_int x; print_string " "
| h :: ts -> print_int h; print_string " "; print_s {c=ts}
;;
改进版本:
let print_s2 {c=l}=
let rec print_l list =
match list with
| [] -> raise Empty
| [x] -> print_int x; print_string " "
| h :: ts -> print_int h; print_string " "; print_l ts
in
print_l l
;;