尝试在Erlang中编译嵌套if语句时出现语法错误
我目前正在处理这个类赋值,即在Erlang中创建一个btree,并创建一个能够删除其中元素的函数。从我的角度来看,我无法理解Erlang在编译代码时返回的错误尝试在Erlang中编译嵌套if语句时出现语法错误,erlang,Erlang,我目前正在处理这个类赋值,即在Erlang中创建一个btree,并创建一个能够删除其中元素的函数。从我的角度来看,我无法理解Erlang在编译代码时返回的错误 btree.erl:211:'end'之前的语法错误 据我所知这不是真的,但我一定是错的?我怀疑它存在于嵌套的if子句中,但我尝试根据此处对嵌套的if语句进行编码 我怀疑这可能只是一个小问题,我现在压力太大/看不见。任何帮助都将不胜感激 deleteBT(BTree = {ElementAtom,Height,Links,Rechts},
btree.erl:211:'end'之前的语法错误
据我所知这不是真的,但我一定是错的?我怀疑它存在于嵌套的if子句中,但我尝试根据此处对嵌套的if语句进行编码
我怀疑这可能只是一个小问题,我现在压力太大/看不见。任何帮助都将不胜感激
deleteBT(BTree = {ElementAtom,Height,Links,Rechts}, Element) ->
if
Element > ElementAtom ->
NeuRechts = deleteBT(Rechts, Element),
Hanoi = findHeight(NeuRechts, Links),
{ElementAtom,Hanoi,Links,NeuRechts};
Element < ElementAtom ->
NeuLinks = deleteBT(Links, Element),
Hanoi = findHeight(NeuLinks, Rechts),
{ElementAtom,Hanoi,NeuLinks,Rechts};
Element == ElementAtom ->
if
BTree == {ElementAtom, Height, Links,{}} -> Links;
BTree == {ElementAtom, Height, {},Rechts} -> Rechts;
BTree == {ElementAtom, Height, {},{}} -> {};
BTree == {ElementAtom, Height, Links,Rechts} ->
Kleinster = kLZahl(Rechts), %Findet uns die Kleinste Zahl vom übergebenen Baum
RechtsNeu = deleteBT(Rechts, Kleinster),
Hanoi = findHeight(RechtsNeu, Links),
{Kleinster, Hanoi, Links, RechtsNeu};
true -> -1
end;
true -> -1;
end.
deleteBT(BTree={ElementAtom,Height,Links,Rechts},Element)->
如果
元素>元素原子->
NeuRechts=deleteBT(Rechts,元素),
河内=findHeight(NeuRechts,Links),
{ElementAtom,河内,Links,NeuRechts};
元素<元素原子->
NeuLinks=deleteBT(链接,元素),
河内=findHeight(NeuLinks,Rechts),
{ElementAtom,河内,NeuLinks,Rechts};
元素==元素原子->
如果
BTree=={ElementAtom,高度,链接,{}->Links;
BTree=={ElementAtom,Height,{},Rechts}->Rechts;
BTree=={ElementAtom,Height,{},{}}->{};
BTree=={ElementAtom,高度,链接,Rechts}->
Kleinster=kLZahl(记录),%Findet uns die Kleinste Zahl vomübergenen Baum
RechtsNeu=deleteBT(Rechts,Kleinster),
河内=findHeight(RechtsNeu,链接),
{Kleinster,河内,林克斯,RechtsNeu};
正确->-1
结束;
正确->-1;
结束。
我从你的评论中看到,你已经解决了这个问题
尽管如此,我还是想借此机会向您推荐一种简单的方法,使用模式匹配和:
Element>ElementAtom->
NeuRechts=删除(记录,元素),
Hanoi=查找高度(NeuRechts,链接),
{ElementAtom,河内,Links,NeuRechts};
当Element
NeuLinks=删除(链接、元素),
河内=查找高度(NeuLinks,Rechts),
{ElementAtom,河内,NeuLinks,Rechts};
删除bt({ElementAtom,{uAtom,Links,{},ElementAtom)->
联系;
删除bt({ElementAtom,{},Rechts},ElementAtom)->
记录;
delete_bt({ElementAtom,Height,Height,Links,Rechts},ElementAtom)->
Kleinster=kLZahl(记录),%Findet uns die Kleinste Zahl vomübergenen Baum
RechtsNeu=删除(Rechts,Kleinster),
河内=查找高度(RechtsNeu,链接),
{Kleinster,河内,林克斯,RechtsNeu};
删除\u bt(\u,\u)->
-1.
我找到了解决方案,在最后一个true条件中删除了一个分号。结束之前的最后一个表达式不能有代码>谢谢你,jose,我也刚刚意识到了这一点。谢谢你的提示,这种编码方式看起来更具可读性,如果需要的话,以后更容易修改。我将在下一次任务中尝试实现这一点。但是来自Java和C,使用if语句感觉更容易,更接近我所习惯的。不管怎样,谢谢你的提示。
delete_bt({ElementAtom, _, Links, Rechts}, Element) when Element > ElementAtom ->
NeuRechts = delete_bt(Rechts, Element),
Hanoi = find_height(NeuRechts, Links),
{ElementAtom, Hanoi, Links, NeuRechts};
delete_bt({ElementAtom, _, Links, Rechts}, Element) when Element < ElementAtom ->
NeuLinks = delete_bt(Links, Element),
Hanoi = find_height(NeuLinks, Rechts),
{ElementAtom, Hanoi, NeuLinks, Rechts};
delete_bt({ElementAtom, _, Links, {}}, ElementAtom) ->
Links;
delete_bt({ElementAtom, _, {}, Rechts}, ElementAtom) ->
Rechts;
delete_bt({ElementAtom, Height, Height, Links, Rechts}, ElementAtom) ->
Kleinster = kLZahl(Rechts), %Findet uns die Kleinste Zahl vom übergebenen Baum
RechtsNeu = delete_bt(Rechts, Kleinster),
Hanoi = find_height(RechtsNeu, Links),
{Kleinster, Hanoi, Links, RechtsNeu};
delete_bt(_, _) ->
-1.