Lambdaheads: Unterschied zwischen den Versionen
Daxim (Diskussion | Beiträge) K Kat |
Dio (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(55 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Usergroup | |||
|logo=Lambdaheads-Logo.jpg | |||
|organizer=[[User:dio|dio]]; vormals [[User:citizen428|citizen428]] und [[User:epsilonhalbe|epsilonhalbe]] | |||
|email= | |||
|irc= | |||
|startdate= | |||
|homepage= | |||
|topic=Funktionale Programmierung | |||
|status=active | |||
|meetings=3. Mittwoch im Monat | |||
|targetgroup=Jeder mit Interesse an funktionaler Programmierung, vom Mathematiker zum Software-Entwickler. | |||
|description=Ein regelmäßiges Treffen von Leuten die sich für [[wde:Lisp|Lisp-Dialekte]] und [[wde:Funktionale_Programmierung|funktionale Programmierung]] im Allgemeinen interessieren. | |||
}} | |||
= WTF = | = WTF = | ||
Ein regelmäßiges Treffen von Leuten die sich für [[wde:Lisp|Lisp-Dialekte]] und [[wde:Funktionale_Programmierung|funktionale Programmierung]] im Allgemeinen interessieren. | Ein regelmäßiges Treffen von Leuten die sich für [[wde:Lisp|Lisp-Dialekte]] und [[wde:Funktionale_Programmierung|funktionale Programmierung]] im Allgemeinen interessieren. | ||
Zeile 10: | Zeile 17: | ||
= Kommende Events = | = Kommende Events = | ||
Voraussichtlich jeder 3te Mittwoch im Monat | |||
== nächste reguläre Termine == | |||
=== 2017-07-19 Wed 19:30-22:00 (Library) === | |||
==== Topic: TBD ==== | |||
Termin: Die Organisation der Lambdaheads wurde auf [http://meetup.com/Lambdaheads meetup] verschoben - bitte dort die Themenlage ansehen die Announcements passieren ca 1-2 Wochen vor dem eigentlichen Termin. | |||
-- | |||
== Vortragswünsche == | == Vortragswünsche == | ||
* NixOS - A linux with functional package manager ([[Benutzer:Epsilon.halbe|ε/2]], [[phaebz]]) | |||
* Elm - Functional Reactive Programming ([[Benutzer:Epsilon.halbe|ε/2]]) | |||
* Cryptol - a DSL for cryptography ([[Benutzer:Epsilon.halbe|ε/2]]) | |||
* Coq - a proof assistant ([[Benutzer:Epsilon.halbe|ε/2]]?) | * Coq - a proof assistant ([[Benutzer:Epsilon.halbe|ε/2]]?) | ||
* Interfacing to SDL/Games in functional languages ([http://prog21.dadgum.com/23.html Purely Functional Retro Games]) | * Interfacing to SDL/Games in functional languages ([http://prog21.dadgum.com/23.html Purely Functional Retro Games]) | ||
* Readable/non-trivial Haskell Examples ([[Benutzer:Epsilon.halbe|ε/2]], e.g. Pandoc) | * Readable/non-trivial Haskell Examples ([[Benutzer:Epsilon.halbe|ε/2]], e.g. Pandoc) | ||
* How Darcs works | * How Darcs works | ||
* Two λ enter, one λ leaves: [http://snapframework.com/ Snap] vs. [http://yesodweb.com/ Yesod] | * Two λ enter, one λ leaves: [http://snapframework.com/ Snap] vs. [http://yesodweb.com/ Yesod] ([[Benutzer:Epsilon.halbe|ε/2]]) | ||
* Emacs | * Emacs ([[Benutzer:Epsilon.halbe|ε/2]]) | ||
* http://lambdacube3d.com/ | |||
__TOC__ | |||
== Vortragsvorschläge == | == Vortragsvorschläge == | ||
Zeile 58: | Zeile 57: | ||
= Kontakt = | = Kontakt = | ||
* [[User:Citizen428|citizen428]] | * [[User:dio|dio]] | ||
<!-- | |||
* [[User:Citizen428|citizen428]] - derzeit auf Weltreise | |||
* [[User:Epsilon.halbe|epsilonhalbe]] | * [[User:Epsilon.halbe|epsilonhalbe]] | ||
--> | |||
= Frühere Events = | = Frühere Events = | ||
=== 2016-06-08 Wed 19:30-22:30 (Library) === | |||
==== Topic: Haskell/Purescript and maybe some Erlang ==== | |||
* Benefits and Problems of using Haskell and Purescript in this day and age. | |||
== 2016-05-11 Wed 19:30 (Library) == | |||
==== Topic: Taming the parallel beast ==== | |||
* Perl6 | |||
** Concurrency primitives, basics for parallelism | |||
** Promises/hyper-operators ... | |||
* Haskell | |||
** Accelerate - complicated but powerful library to do GPU operations in a high level language | |||
** [https://github.com/epsilonhalbe/accelerate-typelits accelerate-typelits] | |||
==2016-03-09== | |||
* 19:30 '''Parsing in Haskell''' | |||
** [http://www.meetup.com/Lambdaheads/events/228735477/ meetup] | |||
** [https://github.com/epsilonhalbe/Talks/tree/master/20160309-Parsing slides(github)] | |||
==2016-02-10== | |||
* 19:30 '''Category Theory''' part 2 | |||
** [http://www.meetup.com/Lambdaheads/events/227402479/ meetup] | |||
** [https://github.com/epsilonhalbe/Talks/tree/master/20151209-LH-Categories slides] | |||
** a neat trick of encoding numbers on a type level, [https://gist.github.com/mcschroeder/b59c7859db87f27b812f gist] by michael schröder | |||
==2016-01-20== | |||
* 19:00 '''Functional Calisthenics''' - by Peter 'codecop' Kofler | |||
** [http://www.meetup.com/Lambdaheads/events/226571385/ meetup] | |||
** [https://github.com/epsilonhalbe/lambdadojo github: solution in haskell] | |||
==2015-12-09== | |||
* '''category theory''' part 1 [http://www.meetup.com/Lambdaheads/events/226089384/ meetup] | |||
* [https://github.com/epsilonhalbe/Talks/tree/master/20151209-LH-Categories slides] | |||
==2015-11-11== | |||
* '''functional web experience''' [http://www.meetup.com/Lambdaheads/events/226089022/ meetup] | |||
* hdgarood - purescript | |||
* gregor riegler - purescript | |||
* peter - jboss (erlang webframework) | |||
==2015-10-21== | |||
* '''No agenda''' [http://www.meetup.com/Lambdaheads/events/225606983/ meetup] | |||
* skillsmatter conference | |||
* [https://github.com/epsilonhalbe/Talks/tree/master/20151021-LH-Stack haskell stack tool] | |||
* [https://github.com/epsilonhalbe/Talks/tree/master/20151021-LH-Func thinking about function composition/functor/applicative/warm fuzzy things] | |||
==Summer break== | |||
==2015-07-02 special== | |||
* '''Lambda-Calculus/Dependent-Type Theory''' [http://www.meetup.com/Lambdaheads/events/223610012/ meetup] a lecture at the university of vienna dpt. of logic by prof. dana s. scott | |||
* [https://dl.dropboxusercontent.com/u/11887842/scott.7z slides] | |||
==2015-06-10== | |||
* '''Coding dojo - minesweeper kata''' comparing languages (Java, php, haskell(1,2,3) …) [http://www.meetup.com/Lambdaheads/events/222293460/ meetup] | |||
* [https://github.com/epsilonhalbe/minesweeper haskell] martin | |||
* [https://github.com/aschlapsi/FSharpMinesweeper F#] andreas schlapsi | |||
* [http://blog.knatten.org/2011/04/01/the-minesweeper-kata-in-15-lines-of-c/ c] | |||
* [https://github.com/queltos/minesweeper-kata-dart dart] | |||
* [https://bitbucket.org/pkofler/minesweeper-kata java] | |||
==2015-05-13== | |||
* '''Purescript (and maybe some haskell)''' [http://www.meetup.com/Lambdaheads/events/222292794/ meetup] | |||
* presentation by Gregor Riegler [http://sleepomeno.github.io/purescript-lambdaheads/#/ slides] | |||
==2015-04-08== | |||
* '''Fun with Functions''' - Haskell tutorial part 3 | |||
==2015-02-11== | |||
* 19:00 '''Power of polymorphism''', a beginner's tutorial for haskell [http://www.meetup.com/Lambdaheads/events/220385939/ meetup] (part 2) | |||
== 2015-01-14 == | |||
* 19:00 installing Haskell/git (if necessary) | |||
* 19:30 '''Types and Typos''', a beginner's tutorial for haskell with a focus on error messages - see more on [http://www.meetup.com/Lambdaheads/events/219474571/ meetup] | |||
== 2014-12-10 == | |||
* no meeting has happened | |||
== 2014-11-12 == | |||
* Web scraping with Haskell | |||
* Next steps in writing a reporting tool in Haskell | |||
== 2014-10-08 == | |||
* A gentle intro to swift - many thanks to the [[Cocoaheads|Cocoaheads]] and Mikael | |||
* Drawing with Haskell (TagCloud, Calendar) a first step in building a reporting tool with haskell | |||
== 2014-09-10 == | |||
* Record Syntax, Lenses and Prisms - Part 2 ([http://twitter.com/epsilonhalbe @epsilonhalbe]) | |||
== 2014-08-13 == | |||
* Record Syntax, Lenses and Prisms - Functional getters, setters and a bit more ([http://twitter.com/epsilonhalbe @epsilonhalbe]) | |||
* STM with Finalizers ([http://twitter.com/schrototo @schrototo]), fork auf [https://github.com/mcschroeder/ghc github] [ | |||
== 2014-07-09 == | |||
* Monads: a presentation of the Blogpost by Dan Piponi | |||
* Gespräche über allerlei Themen | |||
** Elm Talk bei [http://www.infoq.com/presentations/elm-reactive-programming InfoQ] in dem Evan Czaplicki in der letzten Viertelstunde eine Supermario from Scratch demo gibt | |||
** Tolle Dinge die man mit Haskell machen kann: [http://music-suite.github.io/docs/ref/ Musik], [http://projects.haskell.org/diagrams Diagramme] u.v.m. | |||
** Idris a.k.a. rocket science [https://www.youtube.com/watch?v=fVBck2Zngjo Youtube] | |||
== 2014-06-09 == | |||
* [http://cryptol.net/ Cryptol] a language for cryptography released by Galois.inc | |||
== 2014-05-14 == | |||
* Clojure | |||
** Installing Clojure (wenn notwendig) | |||
** Lösen der Clojure Koans - so weit wie es uns gefällt | |||
* Martin berichtet von den Linuxwochen wo er einen Vortrag zum Thema Haskell gehalten haben wird | |||
== 2014-04-09 == | |||
* <strike>A* algorithmus in Haskell</strike> | |||
* Testen in Haskell (Unit Tests, Property Tests, Proof, Criterion, Profiler) [https://github.com/epsilonhalbe/Lambdaheads/tree/master/2014/04 Stuff] | |||
== 2014-03-14 == | |||
Einführung in Haskell: Buchstaben nach ASCII-Art [https://github.com/epsilonhalbe/Lambdaheads/tree/master/2014/03 Stuff] | |||
http://technologyconversations.com/2014/02/25/java-8-tutorial-through-katas-berlin-clock-easy/ | |||
http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html | |||
== 2013-07-16 == | |||
generators in future ECMAscript (node.js 0.11.2) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators | |||
Python 3 | |||
<pre> | |||
def pager(lines, pagelen=60): | |||
for lineno, line in enumerate(lines): | |||
yield line | |||
if lineno % pagelen == 0: | |||
yield "\f" | |||
for line in pager((range(10000))): | |||
print(line) | |||
</pre> | |||
Perl 6 | |||
<pre> | |||
use v6; | |||
sub pager($lines, $pagelen=60) { | |||
gather for zip 1..200, $lines -> $lineno, $line { | |||
take $line; | |||
take "\f" if $lineno %% $pagelen | |||
} | |||
} | |||
for pager(1..*, 30) -> $line { | |||
say $line; | |||
} | |||
</pre> | |||
Haskell | |||
<pre> | |||
pager ::(Show a) => [a] -> Int -> [String] | |||
pager xs n = [if i %% n then show x else "\f" | (x,i) <- zip xs [1..]] | |||
(%%) :: Int -> Int -> Bool | |||
i %% n = (rem i n) /= 0 | |||
main :: IO () | |||
main = putStr ( unlines (pager [1..10000] 60)) | |||
</pre> | |||
== 2013-06-18 == | |||
comb, one of the opposites of join (the other one is split) | |||
<pre> | |||
String.prototype.comb = function(re) { | |||
// lol type conversion the hacky way | |||
re = ('' + re) // now it's a string | |||
.replace(/^\//, '') // hack off leading | |||
.replace(/\/$/, ''); // trailing delimiter | |||
// no interpolation, no sigils, no sprintf | |||
return eval('this.match(/(' + re + ')+/g)'); | |||
} | |||
</pre> | |||
gather/take construct reimplemented for JS - a replacement for the idiom of declaring a collecting variable and pushing into it occasionally http://perl6.wikia.com/wiki/Gather | |||
<pre> | |||
function gather(fn) { | |||
var guard = new Array; | |||
var take = function (items) { | |||
guard = guard.concat(items); | |||
}; | |||
fn(take); | |||
return guard; | |||
}; | |||
console.log( | |||
gather(function(take) { | |||
for (var i = 0; i <= 10; i++) { | |||
if (i % 2) { | |||
take(i); | |||
} | |||
} | |||
}) | |||
) | |||
var arr = []; | |||
for (var i = 0; i <= 10; i++) { | |||
if (i % 2) { | |||
arr.push(i); | |||
} | |||
} | |||
</pre> | |||
Haskell example is incomplete | |||
<pre> | |||
gather x = foldr (:) [] x | |||
main = print $ gather [0..10] | |||
</pre> | |||
reimplementation of List::Gen::by http://p3rl.org/List::Gen#by-NUM-LIST (no generators, just list transformation) | |||
<pre> | |||
function by(n, a) { | |||
var r = new Array; | |||
while(a.length) { | |||
r.push(a.splice(0, n)); | |||
}; | |||
console.log(a); | |||
return r; | |||
}; | |||
function by2(n, a) { | |||
return a.length ? [a.slice(0, n)].concat(by2(n, a.slice(n))) : []; | |||
} | |||
console.log( by2(5, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) ); | |||
console.log( by2(5, [1,2,3,4,5,6,7,8,9,10,11,12,13,14]) ); | |||
console.log( by2(5, [1,2,3,4]) ); | |||
console.log( by2(5, []) ); | |||
</pre> | |||
<pre> | |||
// contrib by intval | |||
// divides array into equal arrays, each of size n | |||
function by(n, arr) { | |||
function byby(n, arr, accum) { | |||
if(arr.length < 1) { | |||
return accum; | |||
} | |||
var head = [arr.slice(0,n)]; | |||
var tail = arr.slice(n); | |||
return byby(n, tail, accum.concat(head)); | |||
} | |||
return byby(n, arr, []); | |||
} | |||
console.log( by(5, [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) ); | |||
console.log( by(5, [1,2,3,4,5,6,7,8,9,10,11,12,13,14]) ); | |||
console.log( by(5, [1,2,3,4]) ); | |||
console.log( by(25, []) ); | |||
</pre> | |||
== 2013-05-21 == | |||
A revival to much muttering, fretting and frowning of brows! | |||
* A little tutorial on Monads [[User:Epsilon.halbe|(ε/2)]] | |||
** [https://github.com/epsilonhalbe/MonadTalk SourceCode] | |||
** [[media:MonadTalk.pdf|Slides(pdf)]] | |||
* Func-prog in JS: | |||
** [http://stevelosh.com/blog/2013/03/list-out-of-lambda/ Steve Losh: List out of Lambda] | |||
** [http://www.youtube.com/watch?v=3ujq55fCx6o YouTube Elise Huard: Why functional is the new black -- JSConf EU 2012] | |||
== 2012-10-15 == | == 2012-10-15 == | ||
Zeile 259: | Zeile 552: | ||
* Functional Programming in Perl 6 | * Functional Programming in Perl 6 | ||
[[Kategorie: | [[Kategorie:Usergroups]] | ||