Anonymous user
Parametric polymorphism: Difference between revisions
→{{header|Visual Basic .NET}}: Added VB.NET
(→{{header|C sharp|C#}}: Edited code style and added modern version) |
(→{{header|Visual Basic .NET}}: Added VB.NET) |
||
Line 161:
}</lang>
{{anchor|C# modern version}}A version using more modern language constructs:
<lang csharp>using System;
Line 1,349:
'foofoo': ('barbar': (),'bazbaz': ())
</pre>
=={{header|Visual Basic .NET}}==
{{trans|C# modern version}}
<lang vbnet>Class BinaryTree(Of T)
ReadOnly Property Left As BinaryTree(Of T)
ReadOnly Property Right As BinaryTree(Of T)
ReadOnly Property Value As T
Sub New(value As T, Optional left As BinaryTree(Of T) = Nothing, Optional right As BinaryTree(Of T) = Nothing)
Me.Value = value
Me.Left = left
Me.Right = right
End Sub
Function Map(Of U)(f As Func(Of T, U)) As BinaryTree(Of U)
Return New BinaryTree(Of U)(f(Me.Value), Me.Left?.Map(f), Me.Right?.Map(f))
End Function
Overrides Function ToString() As String
Dim sb As New Text.StringBuilder()
Me.ToString(sb, 0)
Return sb.ToString()
End Function
Private Overloads Sub ToString(sb As Text.StringBuilder, depth As Integer)
sb.Append(New String(ChrW(AscW(vbTab)), depth))
sb.AppendLine(Me.Value?.ToString())
Me.Left?.ToString(sb, depth + 1)
Me.Right?.ToString(sb, depth + 1)
End Sub
End Class
Module Program
Sub Main()
Dim b As New BinaryTree(Of Integer)(6, New BinaryTree(Of Integer)(5), New BinaryTree(Of Integer)(7))
Dim b2 As BinaryTree(Of Double) = b.Map(Function(x) x * 0.5)
Console.WriteLine(b)
Console.WriteLine(b2)
End Sub
End Module</lang>
{{out}}
<pre>6
5
7
3
2.5
3.5</pre>
=={{header|Visual Prolog}}==
|