SMLNJ列表遍历

SMLNJ列表遍历,sml,smlnj,Sml,Smlnj,我将如何遍历SMLNJ中的列表。我已经做了三个小时了,我一辈子都搞不懂 所以只需遍历并打印一个列表。用最简单的方法[5,2,3]将打印出5,2,3或这类的列表变体 我如何遍历SMLNJ中的列表 这取决于您想要执行的遍历类型:映射、折叠、迭代 使用递归: (* mapping: *) fun incr_each_by_1 [] = [] | incr_each_by_1 (x::xs) = x + 1 :: incr_each_by_1 xs val demo_1 = incr_each_b

我将如何遍历SMLNJ中的列表。我已经做了三个小时了,我一辈子都搞不懂

所以只需遍历并打印一个列表。用最简单的方法[5,2,3]将打印出5,2,3或这类的列表变体

我如何遍历SMLNJ中的列表

这取决于您想要执行的遍历类型:映射、折叠、迭代

使用递归:

(* mapping: *)
fun incr_each_by_1 [] = []
  | incr_each_by_1 (x::xs) = x + 1 :: incr_each_by_1 xs

val demo_1 = incr_each_by_1 [5,2,3] (* [6,3,4] *)

(* folding: *)
fun sum_all_together [] = 0
  | sum_all_together (x::xs) = x + sum_all_together xs

val demo_2 = sum [5,2,3] (* 10 *)

(* iteration: *)
fun print_each [] = ()
  | print_each (x::xs) = ( print (Int.toString x ^ "\n") ; print_each xs )

val demo_3 = print_each [5,2,3] (* no result, but side-effect *)
使用高阶函数:

val demo_1 = List.map (fn x => x + 1) [5,2,3]
val demo_2 = List.foldl (fn (x, result) => x + result) 0 [5,2,3]
val demo_3 = List.app (fn x => Int.toString x ^ "\n") [5,2,3]

为什么不展示一下你在这三个小时里做了什么?你最好的尝试是什么?这会让我们对问题所在有一些了解。无论你从什么材料中学习,都应该有很多使用列表的例子。Paulson的ML for the Working Programmer免费(合法)提供。列表是第三章。旁注:与许多其他语言不同,在ML中,打印并不是一件经常做的事情,至少在学习时是这样;直到《保尔森》的最后几章才提到这一点。相反,您编写生成值的函数。尝试创建一个所有元素都加倍的列表(即
[5,2,3]
-->
[10,4,6]
)或类似的内容。非常感谢!