从Erlang中的列表中打印每个元素

mao*_*oyi 6 erlang list

我创建了一个函数,它将检查给定列表中是否有任何偶数,然后在列表中收集偶数.但是我被困在我想要在新行中打印出该列表中每个偶数的位置.

这是我的代码片段:

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).
Run Code Online (Sandbox Code Playgroud)

我想也许列表理解,但我也想尝试没有列表理解.

Ste*_*ski 9

你非常接近,但你有一些可疑的功能条款:

  • 第二条,有一个说法[H|[]],没有必要的,因为与下列条款[H|T]时的参数将处理的情况下T[].
  • 最后一个句子不需要保护,因为第三个已经跳过了每个奇数值.请注意,它构造的列表,[H|even_print(T)]因为你没有使用它,所以只是放在这里.它必须是函数中的最后一个表达式,因此它被视为返回值.此外,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)].
Run Code Online (Sandbox Code Playgroud)

如果我们在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]
Run Code Online (Sandbox Code Playgroud)

如果您不想打印,只需取消io:format/2通话即可.