1

任何人都可以告诉如何在 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

想要打印并保留其元素,这意味着不要使用popand push

最好使用模式匹配来完成问题。

代码应该是这样的:

let print_stack stack =???
4

3 回答 3

3

这看起来可能是家庭作业。你应该展示一些你尝试过但不起作用的东西,并解释为什么你认为它不起作用。这比让别人给你答案更有价值。

如果它不是家庭作业:如果你考虑一下,你可以在标准库的另一个地方找到一个很好的实现。的实现Stack.iter告诉你在哪里看。

于 2013-06-23T15:40:04.987 回答
1

该功能Stack.iter似乎完全符合您的要求:

let print_stack print_elem stack = Stack.iter print_elem

在哪里。print_elem打印堆栈的一个元素。

例如let print_elem_int n = (print_int n; print_newline ())

于 2013-06-23T11:29:59.253 回答
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
;;
于 2013-06-23T16:00:37.790 回答