<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Komponere funksjoner i F#</title>
	<atom:link href="http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/</link>
	<description>om livet som .net utvikler</description>
	<lastBuildDate>Wed, 16 May 2012 21:05:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Curry-oppskrift for sultne utviklere</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-102759</link>
		<dc:creator>Curry-oppskrift for sultne utviklere</dc:creator>
		<pubDate>Wed, 11 Aug 2010 12:34:27 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-102759</guid>
		<description>[...] Navnet stammer fra logikeren Haskell Curry, som gjenoppdaget denne teknikken etter at den orginalt var beskrevet av Moses Schönfinkel. Det alternative navnet &#8220;Schönfinkelisation&#8221; for teknikken har blitt foreslått!!! Partial application er et mere beskrivende navn, og får ikke magen til å rumle på samme måte. Jeg har tidligere demonstrert partial application i F# her. [...]</description>
		<content:encoded><![CDATA[<p>[...] Navnet stammer fra logikeren Haskell Curry, som gjenoppdaget denne teknikken etter at den orginalt var beskrevet av Moses Schönfinkel. Det alternative navnet &#8220;Schönfinkelisation&#8221; for teknikken har blitt foreslått!!! Partial application er et mere beskrivende navn, og får ikke magen til å rumle på samme måte. Jeg har tidligere demonstrert partial application i F# her. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lispy C# (og hva er en closure)</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-102635</link>
		<dc:creator>Lispy C# (og hva er en closure)</dc:creator>
		<pubDate>Mon, 09 Aug 2010 07:52:02 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-102635</guid>
		<description>[...] Spesielt interesserte kan også merke seg funksjonen comp på siste linje. Dette er en funksjon som komponerer to eller flere funksjoner, og tilsvarer på en elegant måte hvordan jeg i C# lagde en ny lambda som kombinerte to andre lambdaer. Se gjerne Komponere funksjoner i F#, som også omhandler komposisjon av funksjoner i funskjonelle språk. [...]</description>
		<content:encoded><![CDATA[<p>[...] Spesielt interesserte kan også merke seg funksjonen comp på siste linje. Dette er en funksjon som komponerer to eller flere funksjoner, og tilsvarer på en elegant måte hvordan jeg i C# lagde en ny lambda som kombinerte to andre lambdaer. Se gjerne Komponere funksjoner i F#, som også omhandler komposisjon av funksjoner i funskjonelle språk. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Torbjørn</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98263</link>
		<dc:creator>Torbjørn</dc:creator>
		<pubDate>Wed, 09 Jun 2010 11:28:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98263</guid>
		<description>Jepp, F# skjønner det fint. Om jeg hiver definisjonen av (+) inn i det interaktive F#-vinduet gir det meg tilbake en beskrivelse av typen:

&lt;tt&gt;val ( + ) : (&#039;a -&gt; bool) -&gt; (&#039;a -&gt; bool) -&gt; &#039;a -&gt; bool&lt;/tt&gt;

&#039;a er F#&#039;s måte å si at dette er en generisk type - &#039;a kan være hva som helst, sålenge det er det samme overalt. (&#039;a -&gt; bool) er en funksjon som tar inn en &#039;a og returnerer en boolean. Den totale funskjonen tar inn to slike funksjoner og en &#039;a-verdi, og returnerer en boolean.

F# skjønner at f og g må våre funksjoner fordi jeg bruker dem som funskjoner - jeg kaller dem med x som parameter. Og siden jeg og&#039;er dem sammen (&amp;&amp;) skjønner kompilatoren at de må returnere boolean.</description>
		<content:encoded><![CDATA[<p>Jepp, F# skjønner det fint. Om jeg hiver definisjonen av (+) inn i det interaktive F#-vinduet gir det meg tilbake en beskrivelse av typen:</p>
<p><tt>val ( + ) : ('a -&gt; bool) -&gt; ('a -&gt; bool) -&gt; 'a -&gt; bool</tt></p>
<p>&#8216;a er F#&#8217;s måte å si at dette er en generisk type &#8211; &#8216;a kan være hva som helst, sålenge det er det samme overalt. (&#8216;a -&gt; bool) er en funksjon som tar inn en &#8216;a og returnerer en boolean. Den totale funskjonen tar inn to slike funksjoner og en &#8216;a-verdi, og returnerer en boolean.</p>
<p>F# skjønner at f og g må våre funksjoner fordi jeg bruker dem som funskjoner &#8211; jeg kaller dem med x som parameter. Og siden jeg og&#8217;er dem sammen (&#038;&#038;) skjønner kompilatoren at de må returnere boolean.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stian</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98260</link>
		<dc:creator>Stian</dc:creator>
		<pubDate>Wed, 09 Jun 2010 09:18:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98260</guid>
		<description>Utrolig stilig definisjon av + operator. Det ser ut som et matteuttrykk. Skjønner virkelig kompilatoren at f og g er funksjoner ut fra uttrykket på høyre side? Angrer på at jeg ikke konsentrerte mer på funksjonell programmering da jeg gikk på universitetet.</description>
		<content:encoded><![CDATA[<p>Utrolig stilig definisjon av + operator. Det ser ut som et matteuttrykk. Skjønner virkelig kompilatoren at f og g er funksjoner ut fra uttrykket på høyre side? Angrer på at jeg ikke konsentrerte mer på funksjonell programmering da jeg gikk på universitetet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ameth</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98170</link>
		<dc:creator>Ameth</dc:creator>
		<pubDate>Mon, 07 Jun 2010 13:45:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98170</guid>
		<description>For å understreke at det kun var mindre syntaktiske forskjeller, men det visste du vel kanskje. F# har til og med klart å stjele monader fra Haskell (&quot;Computational Expressions&quot; kaller de det), så det virker som et greit nok språk.</description>
		<content:encoded><![CDATA[<p>For å understreke at det kun var mindre syntaktiske forskjeller, men det visste du vel kanskje. F# har til og med klart å stjele monader fra Haskell (&#8220;Computational Expressions&#8221; kaller de det), så det virker som et greit nok språk.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Torbjørn</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98169</link>
		<dc:creator>Torbjørn</dc:creator>
		<pubDate>Mon, 07 Jun 2010 13:13:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98169</guid>
		<description>Ja, nå synes jeg du tar litt av her Ameth, men det gjør ingen ting ;) Orginalt å komme med sed-kommandoer i stedet for å bare vise hvordan koden ser ut!</description>
		<content:encoded><![CDATA[<p>Ja, nå synes jeg du tar litt av her Ameth, men det gjør ingen ting ;) Orginalt å komme med sed-kommandoer i stedet for å bare vise hvordan koden ser ut!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ameth</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98168</link>
		<dc:creator>Ameth</dc:creator>
		<pubDate>Mon, 07 Jun 2010 13:00:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98168</guid>
		<description>Fjern alle &quot;let&quot;-ene, bruk (den allerede definerte) &quot;.&quot; i stedet for &quot;+&quot; for funksjonskomposisjon, s/n % 10 = 0 /n `mod` 10 == 0/, s/s/printfn/printf/ s@@/=@, s/;/,/, legg til &quot;(&#124;&gt;) = flip ($)&quot; og bytt ut de 2 siste linjene med &quot;mapM_ (putStrLn . check) some_numbers&quot;, så er koden din gyldig Haskell. :P

Det er forresten et verktøy i Hackage for å gjøre om funksjoner til deres curriede ekvivalenter: http://hackage.haskell.org/package/pointfree

% pointfree &#039;valid_as_string v = if v then &quot;valid&quot; else &quot;NOT valid&quot;&#039;
valid_as_string = flip (flip if&#039; &quot;valid&quot;) &quot;NOT valid&quot;
% pointfree &#039;y (\f n -&gt; if n == 0 then 1 else n * f (n-1))&#039;
y (ap (flip if&#039; 1 . (0 ==)) . ap (*) . (. subtract 1))

(Og beklager hvis jeg begynner å bli litt vel evangelist-aktig nå)</description>
		<content:encoded><![CDATA[<p>Fjern alle &#8220;let&#8221;-ene, bruk (den allerede definerte) &#8220;.&#8221; i stedet for &#8220;+&#8221; for funksjonskomposisjon, s/n % 10 = 0 /n `mod` 10 == 0/, s/s/printfn/printf/ s@@/=@, s/;/,/, legg til &#8220;(|&gt;) = flip ($)&#8221; og bytt ut de 2 siste linjene med &#8220;mapM_ (putStrLn . check) some_numbers&#8221;, så er koden din gyldig Haskell. :P</p>
<p>Det er forresten et verktøy i Hackage for å gjøre om funksjoner til deres curriede ekvivalenter: <a href="http://hackage.haskell.org/package/pointfree" rel="nofollow">http://hackage.haskell.org/package/pointfree</a></p>
<p>% pointfree &#8216;valid_as_string v = if v then &#8220;valid&#8221; else &#8220;NOT valid&#8221;&#8216;<br />
valid_as_string = flip (flip if&#8217; &#8220;valid&#8221;) &#8220;NOT valid&#8221;<br />
% pointfree &#8216;y (\f n -&gt; if n == 0 then 1 else n * f (n-1))&#8217;<br />
y (ap (flip if&#8217; 1 . (0 ==)) . ap (*) . (. subtract 1))</p>
<p>(Og beklager hvis jeg begynner å bli litt vel evangelist-aktig nå)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tormod Fjeldskår</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98072</link>
		<dc:creator>Tormod Fjeldskår</dc:creator>
		<pubDate>Fri, 04 Jun 2010 13:18:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98072</guid>
		<description>Veldig elegant måte å spesifisere valideringsregler på. Ingen vil ha vanskeligheter med å forstå hvilke regler som ligger til grunn for &#039;validate&#039;-funksjonen når de ser implementasjonen. Jeg leser gjerne fler F#-poster forresten :-)</description>
		<content:encoded><![CDATA[<p>Veldig elegant måte å spesifisere valideringsregler på. Ingen vil ha vanskeligheter med å forstå hvilke regler som ligger til grunn for &#8216;validate&#8217;-funksjonen når de ser implementasjonen. Jeg leser gjerne fler F#-poster forresten :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: EinarWH</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98003</link>
		<dc:creator>EinarWH</dc:creator>
		<pubDate>Thu, 03 Jun 2010 07:57:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-98003</guid>
		<description>Den boken har vært en &#039;anticepointment&#039; for meg også, synes den er veldig treig og pratete. Men jeg får prøve å komme meg til side 160 jeg også! Underlig, ettersom Tomas P er en flink fyr, og Jon S har vært involvert, formodentlig for å hjelpe til med teksten. Og C# in Depth har ikke de samme problemene. Tvert imot, den er grundig, men samtidig engasjerende og interessant.</description>
		<content:encoded><![CDATA[<p>Den boken har vært en &#8216;anticepointment&#8217; for meg også, synes den er veldig treig og pratete. Men jeg får prøve å komme meg til side 160 jeg også! Underlig, ettersom Tomas P er en flink fyr, og Jon S har vært involvert, formodentlig for å hjelpe til med teksten. Og C# in Depth har ikke de samme problemene. Tvert imot, den er grundig, men samtidig engasjerende og interessant.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Torbjørn</title>
		<link>http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-97987</link>
		<dc:creator>Torbjørn</dc:creator>
		<pubDate>Thu, 03 Jun 2010 05:57:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/06/02/komponere-funksjoner-i-f/#comment-97987</guid>
		<description>Sammenligningene med C# er unødvendige for dem som allerede behersker bruk av funksjonell kode som Linq, og om jeg hadde lest boken for to år siden så hadde jeg nok satt pris på det, men nå føles det litt overflødig ja.

Det som derimot irriterer meg mest er mengden med &quot;meta-tekst&quot;. Hvert lille delkapittel (på rundt to sider) begynner med å fortelle hva delkapittelet skal handle om. Deretter forteller man det man skal fortelle, og at vi også så litt av dette i kapitel X, for så å fortelle hva man kunne ha fortalt, men som er spart til kapittel Y. Til slutt har man et avsnitt om hva neste delkapittel skal handle om, som blir gjentatt i starten av neste delkapittel, som jo er det påfølgende avsnittet. Boken kunne dermed vært kokt ned til en tredjedel. :-0

Men grundighet er også bra, om man har tid til det, så jeg skal holde ut :)</description>
		<content:encoded><![CDATA[<p>Sammenligningene med C# er unødvendige for dem som allerede behersker bruk av funksjonell kode som Linq, og om jeg hadde lest boken for to år siden så hadde jeg nok satt pris på det, men nå føles det litt overflødig ja.</p>
<p>Det som derimot irriterer meg mest er mengden med &#8220;meta-tekst&#8221;. Hvert lille delkapittel (på rundt to sider) begynner med å fortelle hva delkapittelet skal handle om. Deretter forteller man det man skal fortelle, og at vi også så litt av dette i kapitel X, for så å fortelle hva man kunne ha fortalt, men som er spart til kapittel Y. Til slutt har man et avsnitt om hva neste delkapittel skal handle om, som blir gjentatt i starten av neste delkapittel, som jo er det påfølgende avsnittet. Boken kunne dermed vært kokt ned til en tredjedel. :-0</p>
<p>Men grundighet er også bra, om man har tid til det, så jeg skal holde ut :)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

