0

これは、回文関数を作成するために必要なコードです。回文を作成するために使用する前に、listReverse と爆発関数を作成しました。誰かが回文関数を完成させるのを手伝ってくれますか?

let rec listReverse l = match l with
    |[] -> []
    |head :: tail -> (listReverse tail) @ [head]



    (* explode : string -> char list 
     * (explode s) is the list of characters in the string s in the order in 
     *   which they appear
     * e.g.  (explode "Hello") is ['H';'e';'l';'l';'o']
     *)
    let explode s = 
      let rec _exp i = 
        if i >= String.length s then [] else (s.[i])::(_exp (i+1)) in
      _exp 0


    let rec palindrome w = 
    let a = explode w in
    let b = listReverse a in
    if c :: d 
    else false 
4

3 に答える 3

1

あなたが書くときにあなたが達成しようとしていることを(コードではなく)平易な英語で説明するようにしてください

if c :: d 
  else false

また、注意してください

if foo = bar then true else false

に簡略化する必要があります

foo = bar
于 2012-10-12T05:52:44.670 に答える
1

リストを反転するには、 List.rev標準関数を使用する必要があります。Ocaml はフリー ソフトウェアであるため、その実装を確認する必要があります (ファイルstdlib/list.ml) 。

于 2012-10-12T05:42:15.073 に答える
0

if ステートメントを次のように置き換えることができます。

 (* tells wheter its a palindrome or not; most is (List.length a)/2*)
 let rec same l1 l2 cur most =
     match l1, l2 with
         | h1::t1, h2::t2 when h1 = h2 -> 
             if cur < most then same t1 t2 (cur+1) most
             else true
         | _ -> false in

 same a b 0 ((List.length a)/2)
于 2012-10-12T17:47:02.057 に答える