Parametric polymorphism: Difference between revisions

(→‎{{header|C sharp|C#}}: Edited code style and added modern version)
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}}==
Anonymous user