在 Erlang 中打印列表中的每个元素
Print each element from a list in Erlang
我创建了一个函数来检查给定列表中是否有偶数,然后将偶数收集到列表中。但是我被困在我想在新行中打印出该列表中的每个偶数的位置。
这是我的代码片段:
even_print([])-> [];
even_print([H|[]]) -> [H];
even_print([H|T]) when H rem 2 /= 0 -> even_print(T);
even_print([H|T]) when H rem 2 == 0 -> [H|even_print(T)],
io:format("printing: ~n", H).
我在想也许是列表理解,但我也想在没有列表理解的情况下尝试一下。
你非常接近,但你有几个可疑的函数子句:
- 不需要带有参数
[H|[]]
的第二个子句,因为以下带有 [H|T]
参数的子句将处理 T
为 [=15= 的情况].
- 最后一个子句不需要保护,因为第三个子句已经跳过了所有奇数。请注意,它构造的列表
[H|even_print(T)]
只是被丢弃在这里,因为您没有使用它。它必须是函数中的最后一个表达式,因此它被视为 return 值。此外,io:format/2
的最后一个参数必须有一个列表,而且格式字符串是错误的,因为它不包含打印该参数的指令。
进行这些更改后,我们得到以下结果:
-module(e).
-export([even_print/1]).
even_print([])-> [];
even_print([H|T]) when H rem 2 /= 0 ->
even_print(T);
even_print([H|T]) ->
io:format("printing: ~p~n", [H]),
[H|even_print(T)].
如果我们 运行 它在 Erlang shell 中,我们得到:
3> e:even_print(lists:seq(1,10)).
printing: 2
printing: 4
printing: 6
printing: 8
printing: 10
[2,4,6,8,10]
如果您不想打印,只需删除 io:format/2
调用即可。
这是一种方法:
even_print([])-> ok;
even_print([H|T]) when H rem 2 /= 0 -> even_print(T);
even_print([H|T]) when H rem 2 == 0 ->
io:format("printing: ~p~n", [H]),
even_print(T).
在我的 Erlang shell 中输出:
31> c(main).
{ok,main}
32> main:even_print([1,2,3,4,5,6]).
printing: 2
printing: 4
printing: 6
ok
33>
我创建了一个函数来检查给定列表中是否有偶数,然后将偶数收集到列表中。但是我被困在我想在新行中打印出该列表中的每个偶数的位置。
这是我的代码片段:
even_print([])-> [];
even_print([H|[]]) -> [H];
even_print([H|T]) when H rem 2 /= 0 -> even_print(T);
even_print([H|T]) when H rem 2 == 0 -> [H|even_print(T)],
io:format("printing: ~n", H).
我在想也许是列表理解,但我也想在没有列表理解的情况下尝试一下。
你非常接近,但你有几个可疑的函数子句:
- 不需要带有参数
[H|[]]
的第二个子句,因为以下带有[H|T]
参数的子句将处理T
为 [=15= 的情况]. - 最后一个子句不需要保护,因为第三个子句已经跳过了所有奇数。请注意,它构造的列表
[H|even_print(T)]
只是被丢弃在这里,因为您没有使用它。它必须是函数中的最后一个表达式,因此它被视为 return 值。此外,io:format/2
的最后一个参数必须有一个列表,而且格式字符串是错误的,因为它不包含打印该参数的指令。
进行这些更改后,我们得到以下结果:
-module(e).
-export([even_print/1]).
even_print([])-> [];
even_print([H|T]) when H rem 2 /= 0 ->
even_print(T);
even_print([H|T]) ->
io:format("printing: ~p~n", [H]),
[H|even_print(T)].
如果我们 运行 它在 Erlang shell 中,我们得到:
3> e:even_print(lists:seq(1,10)).
printing: 2
printing: 4
printing: 6
printing: 8
printing: 10
[2,4,6,8,10]
如果您不想打印,只需删除 io:format/2
调用即可。
这是一种方法:
even_print([])-> ok;
even_print([H|T]) when H rem 2 /= 0 -> even_print(T);
even_print([H|T]) when H rem 2 == 0 ->
io:format("printing: ~p~n", [H]),
even_print(T).
在我的 Erlang shell 中输出:
31> c(main).
{ok,main}
32> main:even_print([1,2,3,4,5,6]).
printing: 2
printing: 4
printing: 6
ok
33>