SMLNJ список обхода - PullRequest
0 голосов
/ 28 июня 2018

Как мне пройтись по списку в SMLNJ. Я занимаюсь этим уже 3 часа и не могу понять это ради своей жизни.

Так что просто пройтись и распечатать список. В простейшем случае [5,2,3] распечатал бы 5 2 3 или список вариантов этого.

1 Ответ

0 голосов
/ 29 июня 2018

Как мне пройтись по списку в 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]
...