0

大学の演習用のコードを書いていますが、問題があります。私は Oz の初心者で、なぜこのコードが何も表示されないのにコンパイラによって受け入れられるのか理解できません:

declare Tree W P T1 T2 T3 T4
fun {Count0 Tree}
   case Tree.subT of nil then
      if Tree.value==0 then
     1
      else
     0
      end
   [] H|T then
      if Tree.value==0 then 1+{Count0 T}
      else
     0+{Count0 T}
      end
   end
end
in
T1 = tree(value:0 subT:nil)
T2 = tree(value:0 subT:[T4])
T3 = tree(value:0 subT:nil)
T4 = tree(value:0 subT:nil)
T0 = tree(value:W subT:[T1 T2 T3])
{Browse {Count0 Tree}}

コードは、tree.subT のリストとそれらのツリーなどにあるツリーとそのすべてのサブツリーの値の「0」の数をカウントする必要があります。

どんな助けにもとても感謝します!

4

1 に答える 1

0

まず、Tree にも W も割り当てないため、関数は最初のステートメントでブロックされます。case次に、再帰呼び出しは関数の引数をツリーではなくリストに{Count0 T}バインドします。これは、フィールドに含まれるツリーのリストの残りの部分であるためです。Count0TsubT

このCount0関数は、引数としてリストを取ることができます。したがって、valueフィールドを取得してサブツリーを再帰的に反復するには、この関数をもう少し洗練する必要があります。valueたとえば、0 を含むフィールドの数にアキュムレータを使用できます。

于 2015-11-26T22:02:35.740 に答える