Parametric polymorphism: Difference between revisions
Content added Content deleted
(→{{header|C sharp|C#}}: Edited code style and added modern version) |
(→{{header|Visual Basic .NET}}: Added VB.NET) |
||
Line 161: | Line 161: | ||
}</lang> |
}</lang> |
||
A version using more modern language constructs: |
{{anchor|C# modern version}}A version using more modern language constructs: |
||
<lang csharp>using System; |
<lang csharp>using System; |
||
Line 1,349: | Line 1,349: | ||
'foofoo': ('barbar': (),'bazbaz': ()) |
'foofoo': ('barbar': (),'bazbaz': ()) |
||
</pre> |
</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}}== |
=={{header|Visual Prolog}}== |