Monads/Writer monad: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Minor tidy) |
(Added FreeBASIC) |
||
Line 450: | Line 450: | ||
half → 1 |
half → 1 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|FreeBASIC}}== |
|||
{{trans|Go}} |
|||
<syntaxhighlight lang="vbnet">Type mwriter |
|||
value As Double |
|||
log_ As String |
|||
End Type |
|||
Function Unit(v As Double, s As String) As mwriter |
|||
Dim As mwriter mw |
|||
mw.value = v |
|||
mw.log_ = " " & s & ": " & Str(v) & Chr(10) |
|||
Return mw |
|||
End Function |
|||
Function Root(mw As mwriter) As mwriter |
|||
mw.value = Sqr(mw.value) |
|||
mw.log_ = mw.log_ & " Took square Root: " & Str(mw.value) & Chr(10) |
|||
Return mw |
|||
End Function |
|||
Function addOne(mw As mwriter) As mwriter |
|||
mw.value = mw.value + 1 |
|||
mw.log_ = mw.log_ & " Added one : " & Str(mw.value) & Chr(10) |
|||
Return mw |
|||
End Function |
|||
Function Half(mw As mwriter) As mwriter |
|||
mw.value = mw.value / 2 |
|||
mw.log_ = mw.log_ & " Divided by two : " & Str(mw.value) & Chr(10) |
|||
Return mw |
|||
End Function |
|||
Dim As mwriter mw1 |
|||
mw1 = Unit(5, "Initial value ") |
|||
mw1 = Root(mw1) |
|||
mw1 = addOne(mw1) |
|||
mw1 = Half(mw1) |
|||
Print "The Golden Ratio is "; mw1.value |
|||
Print !"\nThis was derived as follows:-" |
|||
Print mw1.log_ |
|||
Sleep</syntaxhighlight> |
|||
{{out}} |
|||
<pre>The Golden Ratio is 1.618033988749895 |
|||
This was derived as follows:- |
|||
Initial value : 5 |
|||
Took square Root: 2.23606797749979 |
|||
Added one : 3.23606797749979 |
|||
Divided by two : 1.618033988749895</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |