1

文字列を文字リストリストに変換しようとしていますが、次のコードがあります:

fun linelist file =
                     let
                       val instr = TextIO.openIn file
                       val str   = TextIO.inputAll instr
                     in 
                       String.tokens (fn x => x = #"\n")str
                     before
                       TextIO.closeIn instr
                     end;

fun getsudo file   = map explode (linelist file);

次のファイル(sudo.txt)を有効にする必要があります

53**7****\n6**195***\n*98****6*\n8***6***3\n4**8*3**1\n7***2***6\n*6****28*\n***419**5\n****8**79\n

の中へ

[[#"5",#"3",#"*",#"*",#"7",#"*",#"*",#"*",#"*",],
[#"6",#"*",#"*",#"1",#"9",#"5",#"*",#"*",#"*",],
[#"*",#"9",#"8",#"*",#"*",#"*",#"*",#"6",#"*",],
[#"8",#"*",#"*",#"*",#"6",#"*",#"*",#"*",#"3",],
[#"4",#"*",#"*",#"8",#"*",#"3",#"*",#"*",#"1",],
[#"7",#"*",#"*",#"*",#"2",#"*",#"*",#"*",#"6",],
[#"*",#"6",#"*",#"*",#"*",#"*",#"2",#"8",#"*",],
[#"*",#"*",#"*",#"4",#"1",#"9",#"*",#"*",#"5",],
[#"*",#"*",#"*",#"*",#"8",#"*",#"*",#"7",#"9",]]

しかし、私は代わりにこれを取得します

[[#"5",#"3",#"*",#"*",#"7",#"*",#"*",#"*",#"*",#"\\",#"n",#"6",
  #"*",#"*",#"1",#"9",#"5",#"*",#"*",#"*",#"\\",#"n",#"*",#"9",
  #"8",#"*",#"*",#"*",#"*",#"6",#"*",#"\\",#"n"#"8",#"*",#"*",
  #"*",#"6",#"*",#"*",#"*",#"3",#"\\",#"n",#"4",#"*",#"*",#"8",
  #"*",#"3",#"*",#"*",#"1",#"\\",#"n",#"7",#"*",#"*",#"*",#"2",
  #"*",#"*",#"*",#"6",#"\\",#"n",#"*",#"6",#"*",#"*",#"*",#"*",
  #"2",#"8",#"*",#"\\",#"n",#"*",#"*",#"*",#"4",#"1",#"9",#"*",
  #"*",#"5",#"\\",#"n",#"*",#"*",#"*",#"*",#"8",#"*",#"*",#"7",
  #"9",#"\\",#"n"]]

どうすれば修正できますか?

4

2 に答える 2

2

爆発()を使用できます。これにより、文字列リストが文字リストに変わります。これは、あなたがやろうとしていることです。変換するには、explode('string') を呼び出します

于 2015-04-08T23:21:13.510 に答える
1

関数を見つけるか記述する必要がありlinesます。文字列を取得し、改行文字が発生する場所に従って文字列の配列に分割します。

lineshaskell で呼び出されます。それ以外; の代わりにinutAll、文字列の配列を蓄積しながら行ごとに入力する必要があります。

また、入力ファイルには、改行の代わりに実際の '\' \n' 文字が含まれているようです。

入力は次のようにする必要があります。

53**7****
6**195***
*98****6*
8***6***3
4**8*3**1
7***2***6
*6****28*
***419**5
****8**79

lines.sml:

open Char;
open String;
open List;

fun linelist file =
    let val instr = TextIO.openIn file
        val str   = TextIO.inputAll instr
    in tokens isSpace str
       before
       TextIO.closeIn instr
    end;


fun getsudo file   = map explode (linelist file);


fun  main args = 
   getsudo "sudo.txt";

セッション:

- main 1;
val it =
  [[#"5",#"3",#"*",#"*",#"7",#"*",#"*",#"*",#"*"],
   [#"6",#"*",#"*",#"1",#"9",#"5",#"*",#"*",#"*"],
   [#"*",#"9",#"8",#"*",#"*",#"*",#"*",#"6",#"*"],
   [#"8",#"*",#"*",#"*",#"6",#"*",#"*",#"*",#"3"],
   [#"4",#"*",#"*",#"8",#"*",#"3",#"*",#"*",#"1"],
   [#"7",#"*",#"*",#"*",#"2",#"*",#"*",#"*",#"6"],
   [#"*",#"6",#"*",#"*",#"*",#"*",#"2",#"8",#"*"],
   [#"*",#"*",#"*",#"4",#"1",#"9",#"*",#"*",#"5"],
   [#"*",#"*",#"*",#"*",#"8",#"*",#"*",#"7",#"9"]] : char list list
- 
于 2010-10-12T22:37:54.493 に答える