2013-03-30 24 views
4

我想在Erlang中创建16个目录。对于(create_dir(“work/p”++ A,其中A是列表[0,1,... f]中的元素)(十六进制表示中的十六个数字)。十六行喜欢:MKDIR(“工作/ P0”),MKDIR(“工作/ P1”)等Erlang通过列表(或设置)循环处理文件

我已经看过列表:的foreach在使用乐趣的例子中,可以定义外的一个函数循环,并呼吁呢?

我是新来的Erlang和用于C++等

回答

5

是的,这是可能的外呼定义(命名)函数来lists:foreach/2。为什么你有关系吗?钍是这样的情况,当一个匿名功能是难以置信的方便:

lists:foreach(fun(N) -> 
        file:make_dir(
         filename:join("work", "p"++integer_to_list(N, 16))) 
       end, lists:seq(0, 15)). 

filename:join/2呼叫将使用相应的目录分隔符来构造串work/pN,其中N是在十六进制表示的整数构建的使用integer_to_list/2,它转换的整数到给定基数(16)中的字符串(列表)。

lists:seq/2是一个友好的小功能,返回列表[A,A+1,A+2,...,B-1,B]给出AB

请注意,您也可以在这里使用list comprehension语法,但由于我们仅将功能应用于列表中的副作用,我选择坚持使用foreach

如果你真的定义一个单独的函数 - 姑且称之为foo,并假定它需要42个参数 - 你可以称其为fun foo/42在你的代码。该表达式的计算结果为一个函数对象,与内联定义的匿名函数一样,函数对象可以传递给lists:foreach/2