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

popその要素を印刷して所定の位置に保持したい。つまり、 and を使用しないでください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スタックの 1 つの要素を出力します。

例えば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 に答える