【问题标题】:Trouble with a the explode function SML爆炸功能 SML 的问题
【发布时间】:2022-01-21 18:24:41
【问题描述】:

我有一个包含以下内容的 .txt 文件:

d3%~19^fgh54 78nm,.j 1.2k~789bv

这是我的代码:

fun parse(L) = 
 let
    val infile = TextIO.openIn(L) 
    fun read(infile) =
        if TextIO.endOfStream(infile) then " " else (valOf(TextIO.inputLine(infile))) ^ read(infile);
    fun split(S) = explode(S)
in
    split(read(infile))
end;

这是我得到的输出: [#"d",#"3",#"%",#"~",#"1",#"9",#"^",#"f",#"g",#"h" ,#"5",#"4",#"",#"7",#"8", #"n",...] : 字符列表

我不明白为什么explode 不会把它给出的整个字符串变成一个char 列表。

【问题讨论】:

  • 你能解释一下为什么你认为它没有把整个字符串变成一个字符列表吗?仅仅是因为打印输出的缩写吗?
  • 我唯一能想到的是,explode 函数对于给它的字符串的长度是有限制的。我用 .txt 试了一下,它只是字母表,它只是在字母 p 之后停止。

标签: sml smlnj


【解决方案1】:

SML/NJ 中的顶级打印机对其打印的数据结构数量有限制。

您可以调整(除其他外)列表和字符串的显示长度,以及使用Control.Print 结构的递归结构的深度。

例子:

- Control.Print.printLength;
val it = ref 16 : int ref
- val stuff = [1,2,3,4,5,6,7,8,9,10];
val stuff = [1,2,3,4,5,6,7,8,9,10] : int list
- Control.Print.printLength := 4;
val it = () : unit
- stuff;
val it = [1,2,3,4,...] : int list
- Control.Print.printDepth;
val it = ref 5 : int ref
- val deep = [[[[[[[[]]]]]]]];
val deep = [[[[[#]]]]] : 'a list list list list list list list list
- Control.Print.printDepth := 10;
val it = () : unit
- deep;
val it = [[[[[[[[]]]]]]]] : 'a list list list list list list list list

如果您想查看所有内容而不考虑大小,则需要定义和使用以您喜欢的方式打印的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多