如何解决了解 Erlang 列表理解生成器
给定这个函数:
pretty_print(Folders,Depth) ->
{CurrrentFolder,ListSubfolders} = Folders,SignTemp = lists:duplicate(Depth,"-"),case Depth of
0 -> Sign = SignTemp;
_ -> Sign = "|" ++ SignTemp
end,io:format("~s~s~n",[Sign,CurrrentFolder]),[pretty_print(Subfolder,Depth+1)|| Subfolder <- ListSubfolders].
当在列表推导式中生成器为 null 或为空时,Erlang 中的递归函数会发生什么?
那么当变量为空时,函数不会调用自己?
它不会在那条线上产生错误吗?有什么可以控制的,这行不发生错误?
{CurrrentFolder,
比如在这段代码中,通过Depth来控制另一个变量的行为:
case Depth of
0 -> Sign = SignTemp;
_ -> Sign = "|" ++ SignTemp
end,
这里有一点我不太明白。
当函数到达目录的最后一个文件夹时会发生什么?
解决方法
¿当在列表解析中生成器为 null 或为空时,Elrang 中的递归函数会发生什么情况?
当列表推导式中的生成器为空时,推导式也是空的。是否递归无关紧要。
那么当变量为空时,函数不会调用自己?
是的。
这行不发生错误就没有什么可控制的了?
不,它只是假设调用者会给出一个匹配它的参数(并且 ListSubfolders
是一个列表,其中的每个元素也匹配它)。直接在头部匹配会更惯用:
pretty_print({CurrrentFolder,ListSubfolders},Depth) ->
SignTemp = lists:duplicate(Depth,"-"),... %% the rest is the same
,
Elrang 中的递归函数在列表中会发生什么 理解生成器是空的还是空的?
易于测试:
-module(a).
-compile(export_all).
go(N) ->
[go(X) || X <- [] ].
在外壳中:
3> a:go(0).
[]
您期望以下返回值是什么:
[ X+1 || X <- [] ]
与您定义的没有什么不同:
f(X) -> X+1.
然后执行:
[f(X) || X <- [] ]
如果没有调用函数的参数,则不会调用该函数。
,只是为了增加清晰度。下面的代码不是为了控制的目的 - 它们'只是'在那里,因为对于根文件夹输入,我们不想放'|'文件夹名称前面的字符(化妆品)。因此,即使您将其更改为:仅 Option Explicit
Sub test()
Dim SA As Worksheet
Dim SB As Worksheet
Dim SALRow As Long 'Declare all your variables
Dim SBLRow As Long
Dim i As Long
Set SA = Worksheets("SA")
Set SB = Worksheets("SB")
SALRow = SA.Cells(SA.Rows.Count,1).End(xlUp).Row
SBLRow = SB.Cells(SB.Rows.Count,1).End(xlUp).Row
Debug.Print SALRow
Debug.Print SBLRow
With SA 'Good practice to always use explicit qualifiers
For i = 1 To SALRow
If .Cells(i,2) = "123456789" Or .Cells(i,10) = "123456789" Then
.Cells(i,1).EntireRow.Copy SB.Cells(SBLRow,1)
SBLRow = SBLRow + 1
End If
Next
End With
End Sub
或 Sign = SignTemp
,它也不会更改逻辑。
Sign = "|" ++ SignTemp
在前面的代码中,case Depth of
0 -> Sign = SignTemp;
_ -> Sign = "|" ++ SignTemp
end,
永远不会是 Folders
,它至少会有 []
的值(可能是空列表的是 {CurrentFolder,[]}
)。
由于下面的列表推导式应用于 ListSubfolders
,所以它是安全的,因为如果 ListSubfolders
是 ListSubfolders
,[]
将不会被调用。
pretty_print
,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。