我正在尝试转换以下变量:
- 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
答案 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"来了。