如何查看smlnj shell中的所有列表项?
我有一个包含365项的列表,对应于一年中的天数 我需要将我的结果与手动计算的结果进行比较,但我只能看到:如何查看smlnj shell中的所有列表项?,sml,smlnj,Sml,Smlnj,我有一个包含365项的列表,对应于一年中的天数 我需要将我的结果与手动计算的结果进行比较,但我只能看到: val it = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...] : int list 有没有一种方法可以在不编写帮助函数的情况下实现这一点?正如quoify所建议的,可以增加SML/NJ渲染非常大值的深度 但您也可以使用=进行比较,而看不到列表的末尾 例如,假设您的365天长度列表名为days,手动计算的结果名为check,然后在REPL-on-inspect
val it = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...] : int list
有没有一种方法可以在不编写帮助函数的情况下实现这一点?正如quoify所建议的,可以增加SML/NJ渲染非常大值的深度 但您也可以使用
=
进行比较,而看不到列表的末尾
例如,假设您的365天长度列表名为days
,手动计算的结果名为check
,然后在REPL-on-inspection中,它看起来就像是两个方面的大量1
:
在这些值上使用=
将显示是否有相同数量的元素,并且这些元素成对排列,实际上是相同的
- days = check;
> val it = true : bool
如果days
和check
包含不同数量的元素,或者如果部分中的1
实际上是0
,那么比较它们是否相等将返回false
。因此,如果您可以通过编程验证365个值是否相等,那么您实际上不需要在屏幕上看到365个值。不管怎么说,这都不容易出错
有没有一种方法可以在不编写助手函数的情况下实现这一点
如上所述;但是我想问:这里的helper函数有什么不好的地方?我认为,如果使用帮助函数,您将减少在手动检查的值中意外键入364或3671
s的风险
下面是一个函数,它生成n
份数x
的列表:
fun repeat 0 x = []
| repeat n x = x :: repeat (n-1) x
然后,您可以创建一个函数来检查您的天数
:
fun does_it_have_365_1s xs =
xs = repeat 365 1
在REPL中运行此命令:
- does_it_have_365_1s [1,1,1];
> val it = false : bool
- does_it_have_365_1s [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
> val it = true : bool
哦,天哪,我真的打了吗
让我们将单个1
翻转为0
- does_it_have_365_1s [1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
> val it = false : bool
也许使用控制结构:?谢谢你,西蒙。我想可能是sml二进制文件上有一个开关或者其他设置返回结果宽度的东西。哦,好吧。学习如何“自己滚”是一项有用的技能。库伊菲指着开关。我的建议不是像“与终端的不希望的行为共存”中那样推出自己的产品,而是将这种行为视为良好的行为,并以不同的方式自动验证非常大的数据结构。:-)
- does_it_have_365_1s [1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
> val it = false : bool