在SML中将“char list array”转换为“char array array”

时间:2017-05-11 19:12:54

标签: multidimensional-array smlnj

我正在尝试转换以下变量:

- final "in1.txt";
val it = [|[#"S",#".",#".",#"."],[#".",#".",#".",#"."],[#"W",#".",#"X",#"W"],
[#".",#".",#"X",#"E"]|] : char list array

从SMLNJ中的'char list array'到'char array array'。我想要这样做的唯一原因是因为我需要能够随机迭代这些数据,为学校项目执行类似Dijkstra的算法(如果有更有效的方法使这些数据可迭代,我都是耳朵)。有没有办法做到这一点?读取输入文件并返回上述内容的函数是这个(我在Stack Overflow中找到它):

fun linelist file =
    let
        open Char
        open String
        open List
        val instr = TextIO.openIn file
        val str   = TextIO.inputAll instr
    in
        tokens isSpace str
        before
        TextIO.closeIn instr
    end

fun final file =
    let
        fun getsudo file = map explode (linelist file)
    in
        Array.fromList (getsudo file)
    end

,需要处理的输入文件如下所示:

S...
....
W.XW
..XE

1 个答案:

答案 0 :(得分:0)

你可能想尝试一种不同的方式来阅读这个(太空交付)地图(帮助Lakis - 是的,我是你的同学)。

fun parse file =
        let
            fun next_String input = (TextIO.inputAll input) 
            val stream = TextIO.openIn file
            val a = next_String stream
            val lista = explode(a)
        in
            lista
        end  

Parse是一个从文本文件中获取所有内容并将其保存在字符串a中的函数。然后,函数explode(SML NJ的String Signature函数)创建一个名为lista的列表。列表的元素是字符串a的字符,顺序相同。

然后,您可以创建另一个将列表内容保存到数组的函数。数组的每一行都包含列表中的字符,直到#" \ n"来了。