lambdaspeech
::
start
1
|
list
|
login
|
load
|
|
{require lib_watch} {START_TITLE} {center {i >>> [[A refactoring of the previous workshop|../workshop]].} <<<} {hr} {div {@ style="font-size:1.5em; text-align:center; margin-bottom:20px;"} Welcome in the '{lambda way} project, {br}a light framework built on a wiki, '{lambda tank}, and {br}a functional programming language, '{lambda talk}. } {center {i « Oh please nooooo!{br} There are hundred of wiki engines and hundred of languages!{br} Why yet another wiki and another language nobody will ever want to use? »{br} Please, let's talk about that ... }} _h1 {div {@ style="text-align:center; background:#eee;"} {TITL 1. lambda talk}} {{CONT 1.} _img data/mustangs.jpg _p First of all, it happens that an old and obfuscated theory coming from the thirties can help to build a modern and consistent language for the web. And this language is nothing but a {i slight overcoat} on existing web technologies - HTML, CSS, SVG, DOM, ..., Javascript. So, spending time learning and using it is spending time learning and using HTML, CSS, SVG, DOM, ..., Javascript. You don't waste time learning an esoteric language coming from nowhere and lost in an empty eco-system, you can take benefit of lot of tutorials all over the web, and everything you need is on the web. _p For instance, let's compare the following HTML/CSS and '{lambda talk} expressions {pre <{span}b>Hello World<{span}/b> -> {b Hello World} '{b hello world} -> {b hello world} } _p The '{lambda talk} expression is a little easier to write and read and that is even more noticeable with nested expressions like {pre <{span}b><{span}i><{span}u> Hello World<{span}/u><{span}/i><{span}/b> -> {b {i {u hello world}}} '{b {i {u hello world}}} -> {b {i {u hello world}}} } _p Now, if you don't know or don't remember how to write {b Hello World} in red color and in a shadowed HTML "div" container you just "google" the WEB, find the related CSS rules and you can write the following HTML/CSS expression: {pre <{span}div style="color:red; box-shadow:0 0 8px black;"> hello world <{span}/div> } _p or this alternate '{lambda talk} parenthesized expression: {pre '{div {@ style="color:red; box-shadow:0 0 8px black;"} hello world} } _p It's a matter of choice and at this point the alternate syntax proposed by '{lambda talk} could be considered as a simple "cosmetic" alternative if HTML was more than a markup syntax, but HTML is a markup syntax. HTML is not a programming language. '{lambda talk} is a programming language. For instance, with '{lambda talk} you can write {code '{* 1 2 3 4 5 6}} to get {b 720}, ie the product of the six first natural numbers and you can't do that with HTML. _p '{lambda talk} is: _ul {b 1) easy to understand}: The simple and consistent way fundamental concepts are introduced might help to understand, for instance, {i data and control structures, anonymous functions, recursion vs iteration, closure or not closure, currying, variadicity, eager vs lazy evaluation, mutability vs immutability, imperative vs functional programming, ...}. '{lambda talk} is a short and simple way between theory and practice. _ul {b 2) friendly}: '{lambda talk} calls things how they use to be called, HTML elements, CSS rules, javascript functions. Web designers and coders will be at home and will be able to use their previous works and skills. _ul {b 3) open}: This language works on top of any web browsers, and web browsers have access to the wide world web library, a huge eco-system for free. _p '{lambda talk} is just useful, you can immediately build "quick and dirty" documents and share them on the WEB. Later you will improve, enrich and structure them at your pace, with or without help from some web designer or coder. _p So, let's go on. _h2 {TITL 1.1. quick intro} {{CONT 1.1.} _p '{lambda talk} in a few words. _h3 {TITL 1.1.1. basic syntax} {{CONT 1.1.1.} _ul Expressions are written in a prefix notation using curly braces, '{}, _ul And away from curly braces words are just words. {pre {@ style="padding-left:50px; background:#fff;"} Hello World ; sequences of words can be written without quotes -> Hello World ; as in any text or spreadsheet editor '{u 2 + 3} is equal to '{+ 2 3} ; '{u 2 + 3} means "underline 2 + 3" -> {u 2 + 3} is equal to {+ 2 3} ; '{+ 2 3} means "add 2 and 3" '{b 1 2 3 4 5 6} ; means "boldify 1 2 3 4 5 6" -> {b 1 2 3 4 5 6} '{* 1 2 3 4 5 6} ; means "multiply 1 2 3 4 5 6" -> {* 1 2 3 4 5 6} '{div ; a HTML container {@ style = "text-align: center; ; with full standard CSS rules background: lightgrey; color: white; font: bold italic 3.0em georgia; text-shadow: 0 0 8px black;"} Hello World! } -> {div {@ style = "text-align: center; font: bold italic 3.0em georgia; background: lightgrey; color: white; text-shadow: 0 0 8px black;"} Hello World! } } } ;; end of 1.1.1. _h3 {TITL 1.1.2. names & functions} {{CONT 1.1.2.} _p Expressions can be given a name, for instance: {pre '{def HI {b Hello brave new World!}} -> {def HI {b Hello brave new World!}} HI, I just say '{HI} -> HI, I just say {HI} } _p Notice that writing {code HI} displays {b HI} and writing {code '{HI}} displays its value. Remember spreadsheets where writing {code 1+2} displays {b 1+2} and writing {code =1+2} displays {b 3}. _p And now, what happens when you want to multiply two non numerical values like {code '{* x y}}? Obviously you get {b NaN}, {b N}ot a {b N}umber. The solution is to {b abstract} the unevaluable expression inside a block delaying evaluation until {code x} and {code y} get a numerical value. In '{lambda talk} writing {pre '{lambda {:x :y} {* :x :y}}} _p creates a delayed expression, a {b function}, and writing {pre '{{lambda {:x :y} {* :x :y}} 3 4}} _p {b applies} the function to these values, ie. replaces {code :x} by {b 3} and {code :y} by {b 4} and asks the evaluation of {code '{* 3 4}} returning {b 12}. The two conjugated {b abstraction & application} replacement processes are central in '{lambda talk}. _p Functions are created with {b lambda} and named with {b def} {pre {@ style="padding-left:50px; background:#fff;"} '{def smart_add ; define the name {lambda {:a :b} ; for a function of 2 args {b :a+:b} is {u equal} to {b {+ :a :b}} ; the function's body } ; end of lambda } ; end of def -> {def smart_add {lambda {:a :b} {b :a+:b} is {u equal} to {b {+ :a :b}}}} '{smart_add 2 3} // call the function on 2 vals -> {smart_add 2 3} '{def fac // define the name {lambda {:n} // for a function of 1 argument {if {= :n 0} // if n is equal to 0 then 1 // then fac = 1 else {* :n {fac {- :n 1}}} // else fac = n * fac(n-1) } // end of if } // end of lambda } // end of def -> {def fac {lambda {:n} {if {= :n 0} then 1 else {* :n {fac {- :n 1}}}}}} '{fac 6} -> {fac 6} '{fac 20} -> {fac 20} '{fac 200} -> Infinity // see {b 1.6 libraries} for the exact value } _p Note how easy it is to mix texts, enrichments, active/live computations and creating new functions, anonymous or not, in a uniform, simple and coherent syntax. } ;; end of 1.1.2. _h3 {TITL 1.1.3. no math, please.} {{CONT 1.1.3.} _p Well, maybe you don't like maths and you like colors. You could play with such a code: {prewrap '{map randcol hello brave new world} -> {map randcol hello brave new world} '{map randcol {serie 1 100}} -> {map randcol {serie 1 100}} } _p using a {code randcol} function written by a friend who likes CSS rules and maths under colors: {pre '{def randcol {lambda {:w} {span {@ style="color:rgb({round {* {random} 255}}, {round {* {random} 255}}, {round {* {random} 255}})"}:w}}} -> {def randcol {lambda {:w} {span {@ style="color:rgb({round {* {random} 255}}, {round {* {random} 255}}, {round {* {random} 255}})"}:w}}} } _p If you like watches you could write {pre {@ style="padding-left:50px; background:#fff;"} °°{°°require lib_watch°°}°° '{clock 200} } _p and get the funny watch at the page's topright, calling a code written for you in the page [[lib_watch]] by somebody who likes maths. _p In any case, with '{lambda talk} you are not alone in an empty space. You can share this language with a smart web designer who will help you to build well structured web pages, and a clever coder who will build on demand rich set of functions abstracting technical details and extending the capabilities of the language. For instance to create an [[advertising page|?view=pub]] or a page computing [[Fast Fourier Transforms|?view=zorg]]. Consider '{lambda talk} as this small runnable staircase in the huge vertical library at the top of the page, giving access to an infinity of books coming from the whole world. _p '{lambda talk} is waiting for your books! _p That's all for a first quick introduction to '{lambda talk}. What can we do with so little? } ;; end 1.1.3. } ;; end 1.1. _h2 {TITL 1.2. the workshop} {{CONT 1.2.} {center {b ... you should probably skip this section at first reading ...}} _p This section is resulting from a random exploration of different algorithms, possibilities and limitations of the language. This section is {i de facto} {b messy} and you should probably skip it at first reading. Later you could browse the following random/messy list of pages relating this exploration: _h3 {TITL 1.2.1. several introductions} {{CONT 1.2.1.} _ul download the full [[machine]] - 25kb - to try at home. _ul a [[quick_intro]] for more explanations, (french), [[book]] (french), _ul a quick answer to the question [[why]], (french), _ul '{lambda talk} in a few words [[rms]], [[sumup]], [[lionel_barbe]], [[ASK_HN]], [[kiss]], [[tao]], [[tao2]], [[nutshell]], [[tuto|?view=arc]], [[presentation]] {sup (new)}, _ul a "making of" the language in this [[paper|?view=fabric_new]], [[fabric_201902|?view=factory_201902_paper]], _ul some slides for a [[lambda factory|?view=factory]], _ul introducing [[LAMBDATALK]], comparing with [[python]], _ul see '{lambda talk} in [[rosettacode.org|http://www.rosettacode.org/wiki/Category:Lambdatalk]], in [[rosetta]] and in [[github.com|https://github.com/amarty66]], _ul the previous [[workshop|http://lambdaway.free.fr/workshop/]], _ul and ... ze [[λ book|?view=BOOK_INTRODUCTION]], and [[kernel]], towards the next version of '{lambda talk} } ;; end 1.2.1. _h3 {TITL 1.2.2. about syntax} {{CONT 1.2.2.} _ul play with [[microtalk]], [[kernel]], some ultimate reduced versions, _ul play with '{lambda talk} in a [[console|console]], _ul play with '{lambda talk} as a dialect of [[λ-calculus|?view=PLR]], [[PLR4]], _ul play with the [[Ycombinator]], [[church numbers|?view=lambda-calcul]], _ul study a standard AST evaluator [[lambdacode|?view=flytalk3]]), _ul play with the [[let]] special form, partial calls, curry & [[variadic]] functions, [[tracing|?view=xxx]], _ul play with [[macro]]s, without [[closure]], [[continuation]], [[CPS]], _ul play with pairs, lists & trees at the λ-calculus level, [[PLT]], _ul play with control structures without any [[if special form|?view=if]], [[when]], _ul discover [[array]]s, [[list]]s, [[serie, map & reduce|?view=map]], [[sort]] & [[quicksort]], [[loop]], [[logo]], [[partition]], [[webworkers|?view=webworker5]], [[booleans]], [[hash]], _ul discover an [[IIFE]] and a [[count]]er, _ul play with a '{lambda talk} version of [[markdown]] syntax, [[replace]], [[IP_valid]], _ul discover [[polymorphism]], [[WSA]], _ul play with [[javascript]] as a dialect of λ-calculus, _ul trace evaluations with [[turing]], [[speed]] tests, _ul call Javascript and CSS code with [[script]]s and [[style]]s, _ul see how to require in a page any code defined in others using [[require]], _ul see how to include in a page any code defined in others using [[include]], _ul read the [[JS code|meca/JS.js]] to get asleep, _ul [[less is more|?view=lessismore]], ;; _ul see how to [[restore|?view=localStorage]] a page, } ;; end 1.2.2. _h3 {TITL 1.2.3. some maths} {{CONT 1.2.3.} _ul pages on [[computing]], [[equation]], [[integrale|?view=petit_10]], [[fibonacci]], [[memoization]], [[Ycombinator]], [[switch]], [[gcd]], [[pascal]], [[euler]], [[horner]], [[newton]], [[horner_newton]], [[prime]], [[isprime]], [[dichotomy]], [[babylon]], [[decbin]], [[factorial]], [[pi]], [[formulas]], [[schwartzschild]], [[fractions]], [[money]], [[encryption]], [[convolution]], _ul pages on numbers: [[numbers]], [[ADD_MUL]], [[big_numbers]], [[yyy]], [[bigint]]s, [[BI]], [[BN]], [[multiplication|?view=M]], [[mult russe|?view=mult]], [[karatsuba]], [[add]], [[complex]], [[frac_pi]], [[compte_goutte]], [[unity_roots]], [[triangle]], [[listnum]], [[addition]], _ul discover [[calculus]], the Discrete Fourier Transform, [[DFT]], [[FFT|?=zorg]], _ul play with the [[Towers of Hanoi|?view=hanoi]], the [[conway]]'s life game, [[guess]], _ul play with [[plot]], [[turtle]] graphics, [[bezier]], the [[decasteljau2]] algorithm, the [[hilbert]] curve, [[svg]], [[pCurves]], [[SVG]], [[SVG_3D|../workshop/?view=SVG_3D]], [[march]], [[stars]], [[outdoors]], [[canvas]], [[mandelbrot]], } ;; end 1.2.3. _h3 {TITL 1.2.4. miscellaneous} {{CONT 1.2.4.} _ul an [[advertising page|?view=pub]], for the "fun", _ul [[tour d'horizon|?view=actu]], _ul [[paving]] a page with blocks, [[fed_style]], _ul compare with [[skribe]], [[curl]] and some others similar authoring tools, _ul play with a [[spreadsheet]], [[hidden_pages]], [[section_edit]], [[inline_edit]], [[bold]], [[block_edit]]{sup (new)}, [[save secure|?view=localStorage]], _ul play with [[note]], [[show2]], [[slide_show]], [[NaN]], [[stairs]], [[jslightbox]], [[wide_picts]], [[TOC]], [[menu]], [[iframe]], [[anchor]]s, [[HTML]], [[tryit]], [[count]], [[timeline]], [[mailto]], [[seven dwarfs|?view=nains]], _ul play with [[dodecaphony]], listen to [[sounds]], _ul play with 3 [[watch]]es, _ul read some [[reflexions|?view=reflexions_20180817]], (french), [[intel_excel]], [[coco]] (french), _ul read about [[teaching]], _ul read four [[conferences|?view=confs]], (french), _ul read a story about [[arms]] (french), _ul read a paper about [[invariants]], (french), _ul read a complete book from [[jules_verne]], (french), _ul view an amazing [[video]], _ul test what you want in [[sandbox]], _ul please, tell me something in [[agora]]. _p And more to come ... _p Let's go further inside '{lambda talk} and discover more capabilities with "special forms", "primitives", "macros" and "libraries". } ;; end 1.2.4. } ;; end 1.2. _h2 {TITL 1.3. special forms} {{CONT 1.3.} _p The language comes with 9 special forms, {i key words} {center [{code {b lambda, def, if, quote|', let, macro, script, style, require}}] } {pre 1: '{lambda {:args} body} -> anonymous function 2: '{def name expression} -> add name to the dictionary 3: '{quote expr1 ...} or ''{first rest} -> unevaluated expressions 4: '{if bool then one else two} -> conditional structure 5: '{let { {:arg_1 val_1} ...} body} -> local variables 6: '{macro regular exp to lambdatalk exp} -> add syntactic sugar 7: '{script JS code} -> add JS code to the environment 8: '{style CSS rules} -> add CSS rules to the environment 9: '{require. page_1 ...} -> add code of page_1 ... } _p More details in [[special_forms]]. } ;; end 1.3. _h2 {TITL 1.4. primitives} {{CONT 1.4.} _p An extendable set of built-in JS primitives is predefined: {prewrap {b STRINGS} equal?, empty?, chars, charAt, substring, length, first, rest, last, nth, replace, serie, map, reduce, {b MATHS} +, *, -, /, %, <, >, <=, >=, =, not, or, and, abs, acos, asin, atan, ceil, cos, exp, floor, pow, log, random, round, sin, sqrt, tan, min, max, PI, E, {b ARRAYS} #.new, #.disp, #.array?, #.null?, #.empty?, #.in?, #.length, #.get, #.first, #.last, #.rest, #.slice, #.concat, #.set!, [#.addlast!|#.push!], ]#.sublast!| #.pop!], [#.addfirst!|#.unshift!], [#.subfirst!|#.shift!], #.reverse!, #.sort!, ##.split, #.join {b PAIRS, LISTS} [pair|cons], pair?, nil?, left, right, pair.disp, list.new, list.disp, list.null?, list.length, [list.first|car], [list.rest|cdr], list.reverse, list.butfirst, list.last, list.butlast {b HTML/CSS} @, div, span, a, ul, ol, li, dl, dt, dd, table, tr, td, h1, h2, h3, h4, h5, h6, p, b, i, u, center, br, hr, blockquote, sup, sub, del, code, img, pre, prewrap, textarea, audio, video, source, select, option, object, canvas, input, iframe {b SVG} svg, line, rect, circle, ellipse, polygon, polyline, path, text, g, mpath, use, textPath, pattern, image, clipPath, defs, animate, set, animateMotion, animateTransform, title, desc {b MISC} lib, date, hide, turtle, drag } _p More details in [[primitives]]. _p In the last version (under construction) of '{lambda talk} the functions working on words, sentences and arrays are polymorphic. More precisely: {prewrap 1. a word is empty or a group of chars except spaces and braces () booleans and numbers are words and are never evaluated 2. a sentence is empty or a sequence of spaces separated words quotes are useless around words and sentences 3. an array is an ordered set of indexed values values can be words, sentences and arrays pairs and lists don't exist anymore, they are special arrays 4. this is the new set of 35 polymorphic functions: 4.1. translations between words, sentences and arrays (transtypage): {b w2s, w2a, s2w, s2a, a2w, a2s,} 4.2. predicates: {b type?, null?, empty?, equal?, isin?,} ... 4.3. input is unchanged {b display, length, get, slice, first, last, rest, butlast, reverse, sort, replace, concat, serie, map, reduce, feed} ... 4.4. input is modified {b set!, slice!, addfirst!, addlast!, subfirst!, sublast! reverse!, sort!, replace!,} ... } _p Stay tuned ... } ;; end 1.4. _h2 {TITL 1.5. macros} {{CONT 1.5.} _p A small but extendable set of macros make titles, paragraphs, lists, links and pictures easy to write and read. For instance plenty of expressions embedded into curly braces can be written without: _ul write a title using {code _{span}h1 Hello World} instead of the standard {code '{h1 Hello World}}, _ul write a link using {code [{span}[name|url]]} instead of the standard {code '{a {@ href="url"}name}} _ul insert a picture using "{code _{span}img picture_url}" instead of {code '{img {@ src="picture_url" width="100%"}}} _p You could also define a while loop this way {pre '{macro \{while in \[(\d*) (\d*)\] with step (\d*) do (.*)\} to {map €3 {serie €1 €2}}} '{while in [1 9] with step 1 do {lambda {:i} {* :i :i}}} -> 1 4 9 16 25 36 49 64 81 } _p See more in page [[macro]]. } ;; end 1.5. _h2 {TITL 1.6. libraries} {{CONT 1.6.} _p A currently tiny but extendable set of libraries, [{code lib_agora, lib_BI, lib_BN, lib_list, lib_macro, lib_note,lib_sheet, ib_show, lib_slideshow, lib_strint, lib_watch, lib_3D, ...}] making the language close to specific needs. For instance using [[lib_BN]], a library written by a smart coder overcoming limits of JS numbers, you can compute all digits of the factorial of 200: {prewrap '{BN.fac 200} -> 788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000 } _p '{lambda talk} is waiting for your libraries. } ;; end 1.6. _h2 {TITL 1.7. to sum up} {{CONT 1.7.} _p '{lambda talk} is a pure functional language, a {b dialect of the λ-calculus}{sup (1936)} in a Lisp-like prefixed notation taking benefit of the powerful modern web browsers on which it stands as a light overlay, as a {i « dwarf on the shoulders of giants »}. _p '{lambda talk} tries to be the simplest and most coherent programmable programming language which can be built, as a bridge between the terce λ-calculus and the widely used WEB technologies, HTML/CSS, SVG, DOM, ..., JavaScript. {center « {i Any fool can write code that a computer can understand.{br} Good programmers write code that humans can understand.} »{br} [[Kent Beck|https://en.m.wikiquote.org/wiki/Kent_Beck]] } _p '{lambda talk} just helps average programmers to easily write readable code. '{lambda talk} just helps non coders to have a chance to talk with cute web designers and smart coders and allow a true collaborative work. Non coders come with their own knowledge and begin writing pages using existing functionalities. Web designers add readability and coders extend the language on demand. _p The λ-calculus is for human brain what assembly language is for the computer. On top of web browsers '{lambda talk} simply brings the power of functional programming to average people, anonymous people, {i lambda} people. _p See more details in [[book|?view=BOOK_INTRODUCTION]]. } ;; end 1.7. } ;; end 1. _h1 {div {@ style="text-align:center; background:#eee;"} {TITL 2. lambda tank}} {{CONT 2.} _img data/mustangs.jpg _p Most of time languages are embedded in Interface Development Environments rather difficult to instal, at least for non "geeks". '{lambda talk} works in a small wiki, '{lambda tank}, designed to be easy to instal. And its user inteface has been reduced to the bare minimum, the wiki page and a single frame editor. _p This is two session's screenshot: {center {img {@ src="data/session_1.jpg" width="90%"}} {br} Using '{lambda talk} in '{lambda tank} } {center {img {@ src="data/session_2.jpg" width="90%"}} {br} Editing a wiki page generating a PDF paper. } _h2 {TITL 2.1. the wiki page} {{CONT 2.1.} _p The wiki page is initially empty, without any predefined structure, with just a title on top. Click on _ul 1) the [{b wiki name}] - here "lambdaspeech" - to come back to the home page from any other wiki page, _ul 2) the double colon [{b : :}] to open/hide a tool bar, _ul 3) the [{b page name}] - here "start" - to open/hide the editor frame. } ;; end of 2.1. _h2 {TITL 2.2. the frame editor} {{CONT 2.2.} _p In the {b editor frame} you find a menu bar showing some informations and a wide text field in which you can write any words and expressions displayed and saved locally in real time, provided expressions are well balanced. For instance the expression '{b {i {u Hello World}}} is well balanced and displays {b {i {u Hello World}}}. And, if you are authorized, click on the button [{b save}] to upload the code on the server and so {b publish} the page. _p In the {b tool bar} you find: _ul the number of people connected, _ul a button [{b pages}] to display the list of pages saved on the server and have access to their history, if you are authorized, _ul a button [{b login|logout}] for authorized editors, _ul a button [{b load}] to load files - pictures, pdfs, ... - in the data folder, if you are authorized, _ul a [{b search field}] to open a page listing wiki pages containing the word you are looking for. } ;; end of 2.2. _h2 {TITL 2.3. kiss attitude} {{CONT 2.3.} _p Nothing else, no more buttons, no menus, no palette windows. Nothing but a view & an editor frames which can be moved inside the browser's window using the title/menu area as an handle. You can scroll the view and reduce or expand the editor to make editing comfortable, even on a mobile device. _p The lack of any button to boldify some selected text is not a weakness, it's a choice: {i you MUST bracket text between curly braces and add the command {b b} to the first one.} Coding simple things is the key for understanding and coding more complex ones. At least it's the key to a true collaborative work without shadow areas. _p That's all for one page. } ;; end of 2.3. _h2 {TITL 2.4. the wiki} {{CONT 2.4.} _p A wiki becomes quickly a set of numerous pages. Just write the name of a page you want to create between two double square opening and closing brackets and, thanks to Ward, this page {i virtually} exists. Go to this page and write something in it and it {i actually} exists. _p A blank page has no structure, except the predefined style which can be modified on demand. It's your responsability to write what you want how you want. You are free! And your wiki will become a bunch of simple notes, an album, a book, a workshop full of mathematical formulas and algorithms, or whatever else. _p Welcome! } ;; end of 2.4. } ;; end of 2. _h1 {div {@ style="text-align:center; background:#eee;"} {TITL 3. lambda way}} {{CONT 3.} _img data/mustangs.jpg _p The '{lambda way} project is a workshop, a test bench for the language where are analyzed its capabilities and limits, (coherency, global/local, partial application vs closure, variadicity, memoization, speed, ...) and explored lots of known algorithms, (quickSort, FFT, big numbers, de Casteljau, convolution, ...). It's a random exploration leading to some refactorings of the kernel in a cyclic process. It's a work in progress towards a functional language which should be simple and useful, at least in a wiki context. _h2 {TITL 3.1. comments} {{CONT 3.1.} _p This is what Ward Cunningham told me about this work (2014/04/29): {blockquote {i « I am impressed with this work and understand {b its uniqueness better now}. I have also rambled through other pages you have made, many as experiments I would guess, and have been summarized by you in this single work. Bravo. » }} _p And also, a few months later: {blockquote {i « I was surprised that the technique worked so well in so many cases. I knew that regex are highly optimized and the cpus themselves optimize sequential access to memory which the regex must have at its core. [..] Yes, this has at its heart the repeated application of a text transformation. The fact that it is repeated application of the same transformation makes it exceptional. [..] Repeated application of Regular Expressions can perform Touring Complete computations. This works because the needed "state" is in the partially evaluated text itself. » All is said! }} _p and recently (19/07/2020) {blockquote {i « I’ve always admired your work, both the interpreter and your exploration of its capabilities. In the wiki tradition it offers clear passage into the networking and graphic capabilities of the browser. Thompson sees it as a philosophical artifact rooted in history and uncovered anew by you. » }} _p And Simon Peyton Jones (2019/02/14): {blockquote {i « I took a quick look. It looks cool -- I like the simple, minimal, but powerful approach. » }} _p And also Paul McJones (2019/02/16): {blockquote {i « I have admired the power and elegance of the lambda calculus since I first learned of it around 1970. And I have admired the elegance of the Wiki idea since I first ran across Ward Cunningham’s Wiki some years back. You’ve combined these ideas in a very interesting way, and {b you figured out a way to harness the power of web technologies} (JavaScript, HTML, CSS, etc.) to implement them. » }} _p On June 2014 somebody (pseudo "maufedz") wrote in [[Reddit|https://www.reddit.com/r/lisp/comments/1xfsd3/alphawiki/]]: {blockquote {i « I like it when I find this simple yet powerful ideas implemented, these are the things that when you see them you think, Why didn't I think of that? I think the results you have gotten from it speak by themselves, very nice looking dynamic pages, and very nice looking PDF export. I also liked your presentation on the 7th ELS, I saw a video of it, I was not there. »}} _p On April 2016 somebody (pseudo "sitkack") wrote in Hacker News: {blockquote {i « This is brilliant by the way. Definitely show it to more people and get feedback, it is so outside of the norm that {b it will take time for the idea to spread}. »}} _p This guy had therefore seen right, this project is probably very outside of the norm ... and the idea has no yet found where to spread. Meanwhile you can analyze a fork in Github by [[graham_simkins]] and some more comments [[here|http://lambdaway.free.fr/workshop/?view=comments]]... } _h2 {TITL 3.2. a work in progress} {{CONT 3.2.} _p It's a work in progress. The previous version of the '{lambda way} project can be seen in this [[workshop|http://lambdaway.free.fr/workshop/]]. The next one should contain: _ul a still to be improved interface ... staying in the {i KISS} attitude, _ul more built-in primitives, full libraries, (rational & complex numbers, 2D/3D algebra, spreadsheet, ray-tracing, lightboxes, ...), _ul beyond the page on [[primitives]], a more complete documentation, tutorials, ... _p The '{lambda way} project is free{sup (GPL)}, without any external dependancies and can be loaded as a {b ~25kb} [[zipped archive|?view=machine]]. You just need some FTP tool - Filezilla, ... - to upload the expanded archive in any host provider running PHP, and a modern web browser to use it from anywhere. } ;; end 3.2. } ;; end 3. _p Use the [[sandbox]] to try '{lambda talk}, you can freely [[download]] the full machine and, please, tell me something in [[agora]]. And follow the ongoing {i chaotic} construction of the [[λ book|?view=BOOK_INTRODUCTION]] to discover the making of ze '{lambda way} project. On the last days of this workshop I was working or reworking on: [[factory|?view=factory_201902_paper]], [[kernel]], [[prime_pattern]], [[convolution]], [[addition]], [[WSA3]], [[ADD_MUL2]], [[lambda]], [[whitepage]], [[matrix]], [[stairs]], [[IPT]], [[UI]], [[pCurves]], [[include]], [[lambda-calcul]]{sup {i revisited}}, [[BOOK|?view=BOOK_INTRODUCTION]], [[from roots to canopy|?view=list2]]. {blockquote {@ style="background:#fff; box-shadow:0 0 8px #000;"} {center Since 2020/02/12 the place I am working in is here: {div {@ style="font-size:3.0em; text-align:center;"} [[lambdaway.fr/workshop|http://lambdaway.fr]]} {b Alain Marty}} } {{hide} {def START_TITLE {div {@ style="position:relative; top:0; left:0;"} {img {@ src="data/bibliotheque_virtuelle.jpg" width="100%"}} {div {@ style="position:absolute; top:20px; right:50px;"}{clock 200}} {div {@ style="position:absolute; bottom:50px; width:100%; font-size: 5.0em; text-align:center; color:#fff; text-shadow:0 0 8px #000;"}'{lambda way}} {input {@ type="button" value="show all slides" style="position:absolute; bottom:-10px; left:20px; opacity:0.8; font-size:1.0em; border-radius:20px;" onclick="show_hide(this)"}} {div {@ style="position:absolute; left:100px; top:250px; opacity:0.8; padding:20px; font-size:2.0em; background:#fff; border-radius:100px; line-height:0.5em;"} go to my [[new workshop|http://lambdaway.fr]]... } } } {def TITL {lambda {:title} {input {@ type="button" value=":title" style="font-size:1em; border:0; background:transparent;" onclick='javascript:LAMBDATANK.toggle_display("{first :title}")' onmouseover="this.style.color='#f00'; this.style.fontStyle='italic';" onmouseout="this.style.color='#000'; this.style.fontStyle='normal';"}} }} {def CONT {lambda {:id} div {@ class="cont" id=":id" style="display:none; box-shadow:0 0 8px #000; padding:10px;"}}} } {script ;; var show_hide = function(target) { var conts = document.getElementsByClassName( 'cont' ); if (target.value === 'show all slides') { for (var i=0; i < conts.length; i++) conts[i].style.display = 'block'; target.value = 'hide all slides' } else { for (var i=0; i < conts.length; i++) conts[i].style.display = 'none'; target.value = 'show all slides' } }; } {style ;; @import url(https://fonts.googleapis.com/css?family=Quicksand); body, #page_frame { padding:0; margin:0; } #page_content { margin:0; font-family: Quicksand; font-size:1.5em; background:#ffe; } #page_frame { width:100%; margin:0; padding:0; } #page_textarea { font:normal 1.2em courier; color:#000; background:#ccc; } h1, h2, h3, h4, h5, h6 { text-indent:20px; } pre {font-size:1.0em; } b { color:#004; } a:hover { text-decoration:underline; } }
lambdaspeech v.20200126