Il Lisp è diverso

warningQuesto –vi avviso subito– è uno di quei post senza troppo senso in cui tento di giutificarmi di quello che faccio. Una roba che capita ogni tanto l’ultima volta credo sia stata questa: Perché Lisp.

Il post è nato in condizioni di serendipity funzionale e ricorsiva. Cioè in seguito a una discussione partita su Facebook e proseguita via mail su quale sia la struttura migliore dei linguaggi di programmazione poi deragliata. Magari ne parlerò in futuro ma forse sono cose che interessano solo i vecchi (anche il mio interlocutore aveva iniziato con il Fortran) mentre oggi sono tutti alle prese con C++, Java, Matlab (di cui se ne parla poco ma c’è). A dire il vero chi seguo su Twitter (il mio social-coso preferito) dice di programmazione funzionale, Clojure, Haskell, Scala e peggio ancora. Che poi è quello che vorrei approfondire, forse probabilmente i miei seguiti non sono tipici, pochissimi gattini pucciosi :wink:

10-90

OK, TL;DR, vengo al dunque: a seguito della discussione ho googlato un po’ (neanche tanto) e serendipiticamente (le ricerche non sono mai perfette e a volte, come in questo caso, per fortuna) sono finito su un vecchio post di John D. Cook, questo: The myth of the Lisp genius.

Questo post mi ha fatto deragliare –al solito! Non tanto quello che dice John (sempre ottimo) ma i commenti.
Adesso, senza prenderlo troppo sul serio, come un gioco, riporto qualcosa copiando –come sempre– di brutto.

Lisp has jokingly been called ‘the most intelligent way to misuse a computer’. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.
Sì, è EW Dijkstra, riportato da Jan Galkowski nel commento del 3 dicembre.

Christopher (Kotfila, si trova su Twitter): Learning LISP is valuable because it provides a completely different perspective on what a programing language is.

Andrew Pennebaker: Verbosity distinguishes programming lanugages. Because Lisp requires less typing than other languages, Lisp affords programmers the mental space to write more complex programs. That’s why AI is typically done in Lisp.
È da leggere tutto il commento, anche divertente.
You don’t have to be a genius to learn Lisp or to use functional programming, but there is a correlation between Lispers and Computer Science education, interest in theory, and natural curiosity.

Personalmente concordo con Jason in tutto e per tutto il suo commento (che non copio, è di là).
Ma ci sono tutti gli altri, tanti spunti.
Ho controllato anche chi sono i commentatori, à la NSA, dove possibile per quelli che maggiormente mi piacciono e ho scoperto una cosa, forse. O forse no, è normale: sono tutti importanti! A volte salta fuori un post in un blog di un giovanissimo che ti piace, lo RSSisci ma il blog muore, il giovane ha trovato lavoro e/o non ha più voglia e tempo. Peccato. Questi invece interagiscono, spesso in proprio o sul blog di John.

Infine aggiungo una cosa mia, anzi tre:

  • le s-expressions che ritornano un valore con la concatenazione e l’annidamento rendono diverso il Lisp da Fortran, Algol e derivati (C++, Java, Python);
  • l’omoiconicità, la struttura del programma è simile alla sua sintassi, e quindi rappresentazione interna del programma può dedurre leggendo il layout del testo;
  • le macro, non è che le padroneggio come vorrei ma sono quelle che unite all’omoiconicità rendono il Lisp un linguaggio di programmazione programmabile.

x-y

:mrgreen:

HtDP – quote, unquote, &co.

c2Naturalmente il mio è solo un supporto a quello che trovate qui.

Lists play a central role in our book and in Racket, which spawned our teaching languages. For the design of programs, it is critical to understand how lists are constructed from first principles; it informs the organizations of the functions in our programs. Routine work with lists calls for a compact notation, however, like the list function.

Since the late 1950s Lisp-style languages have come with an even more powerful pair of list-creation tools: quotation and anti-quotation. Many programming languages support them now […]

Quote

Quotation is a short-hand mechanism for writing down a large list easily. Roughly speaking, a list constructed with the list function can be constructed even more concisely by quoting lists. Conversely, a quoted list abbreviates a construction with list.

Note: Be sure to use BSL+ or higher for working through this intermezzo.

quote è una keyword:

l11

siccome si usa spesso esiste la scorciatoia ' (apice).

l12

Al solito io preferirei usare la REPL ma poi viene diverso, sarebbe così:

l13

quote –inteso come apice– fa anche di più:

l14

nella REPL viene così:

l15

mi sa che devo usare DrRacket.

quasiquote e unquote

But all good things come with surprises, and that includes quote.

Dice Matthias che le liste all’inizio sono meno intuitive di cons; io sono vecchio e non so ma mi fido :grin:, voi leggete di là.

Let us move on then to the actual surprises hidden behind quote. Segue un concetto importante, che non duplico ma si introduce il simbolo: [f]or our purposes, a symbol looks like a variable names except that it starts with ' and that a symbol is a value.

In some cases, you do not want to create a nested list. You actually want a true expression in a quoted list and you want to evaluate the expression during the construction of the list. For such cases, you want to use quasiquote. Like quote, quasiquote is a keyword for a compound sentence: (quasiquote (1 2 3)). And like quote, quasiquote comes with a shorthand, namely the ` character, which is the “other” single-quote key on your keyboard.

Per noi disgraziati con la tastiera italiana il simbolo ` si ottiene con AltGr+’ per Linux e digitando 96 dal tastierino numerico (se c’è) tenendo premuto il tasto Alt per Windows.

Al solito c’è tutto di là ma questo chiarisce tutto:

l16

Avrei potuto scrivere:

l17

che nella REPL si presenta così:

l18

Quindi le scorciatoie sono:
' == quote
` == quasiquote            `
, == unquote (è la virgola)
,@ == unquote-splicing (adesso arriva)

Proprio come nel Common Lisp dove però non esistono le funzioni quasiquote e unquote; inoltre non si usa il termine quasiquote ma backquote. Uh! si usa anche backtick.

Unioni di unquote

When quasiquote meets unquote during the expansion of short-hands, the two annihilate each other.

L’esempio che riporta il prof usa una funzione non definita (make-row) ma non importa, si può proseguire e si arriva alla funzione unquote-splicing la cui scorciatoia e ,@ proprio come nel Common Lisp.

Il prof continua l’esercizio –ahemmm…– visto ma non fatto, si dovrebbe cercare make-row.

:mrgreen:

HtDP- dati arbitrariamente grandi – 3 – generalizzare le funzioni

1627c95b-b5ad-4037-b24b-7b40c6aaef43Continuo da qui a vedere questo qui.
Questo post sembra corto ma solo apparentemente. Seguendo le raccomandazioni a leggere Matthias è mooolto impegnativo, anche se facile e chiaro :wink:

Generalizzare le funzioni

Auxiliary functions are also needed when a problem statement is too narrow. Conversely, it is common for programmers to generalize a given problem just a bit to simplify the solution process.

Qui il prof fa un esempio grafico, riprendendo cose già viste, inutile ripeterle qui. Alla fine giunge alla creazione della funzione polygon. [polygon] is available in one of its [di Racket] libraries. If you are wondering why we just designed a similar function, take a look at the title of the book and the section. The point is not (necessarily) to design useful functions, but to study how programs are designed systematically.

Esercizi con le liste

This chapter presents four extended exercises, all of which aim to solidify your understanding of all elements of design: the design of batch and world programs, the design recipe for functions, making wish lists, and the guidelines for composing functions.

È incredibile come con gli elementi visti finora (siamo appena agli inizi) si riescano a fare cose come quelle proposte. E mica finisce qui :grin:

Il guaio è che questi post non ho ancora trovato il modo di scriverli come vorrei: rimando di là perché è perfetto; e di mio aggiungo quasi niente. Devo pensarci su un po’, prossimamente… :mrgreen:

HtDP- dati arbitrariamente grandi – 2 – liste

2015 - 1Continuando da qui eccomi a leggere qui.

Progettare per composizione

[N]ow you know that programs are complex products and that their production requires the design of many collaborating functions. This collaboration works well if the designer knows when to design several functions and how to compose these functions into one program.

Continuate a leggere là vero? anche perché adesso arriva una funzione di quelle che WOW! :grin:

La funzione list

At this point, you should have tired of writing so many conses just to create a list, especially for lists that contain a bunch of values.

l5

Siamo fortunati, c’è list:

l6
La lista può contenere elementi di ogni tipo, anche liste:

l7

Forse ho trollato, poi il prof ve lo spiega quell’apice (che chiamiamo quote) per inserire la lista interna (altrimenti veniva valutata e dava errore).

Of course, we can apply list not only to values but also to expressions:

l8

Ah, fate gli esercizi ma per intanto:

l9

Una cosa: c’è il dizionario, siamo ancora principianti quindi andiamo (quando serve) il Beginning Student.

Comporre funzioni

Abbiamo visto that programs are collections of definitions: structure type definitions, data definitions, constant definitions, and function definitions.

Fate tante piccole funzioni specializzate, come dice di là. C’è anche la rivelazione del trucco delle Wish Lists, importantissima, molto più di quanto i niubbi riescano a immaginare.

Funzioni ricorsive ausiliarie

People need to sort things all the time, and so do programs.
Qui il prof parte con una lunga lezione, da seguire.

Solo una nota: io mi rifugio nella REPL tutte le volte che posso ma non sempre si può. Per esempio il prof usa spesso la funzione check-expect che è disponibile solo con DrRacket e non subito, dovete selezionare Language/choose Language/Beginning Student.

Ancora una nota: seguire il prof richiede un po’ di pazienza; per esempio non usa mai variabili (scopriremo presto il perché) e allora bisogna sempre costruire la lista al volo. Ovviamente per costruire la variabile primi-cinque si può fare così (e resta a disposizione:

l10

pausa, riprenderò da Generalizing Functions.
:mrgreen:

HtDP- dati arbitrariamente grandi – 1

l8Continuo da qui, oggi sono qui.

I tipi di dati visti finora hanno dimensione uno; vale a dire che ognuno rappresenta un numero o una stringa o una struttura. Ma capita sovente di dover trattare con più dati, per esempio per fare la media occorre una serie di dati.

This part revises the language of data definitions so that it becomes possible to describe data of (finite but) arbitrary size.

Si comincia con le liste –ehi! è il Lisp :grin:

Liste

HdDP è impareggiabile anche per come è scritto, per esempio la definizione che segue è OK anche se contiene un pizzico di LOLlosità.

This chapter introduces self-referential data definitions, that is, definitions that refer to themselves. It is highly unlikely that you have encountered such definitions before. Your English teachers certainly stay away from these, and many mathematics courses are somewhat vague when it comes to such definitions. Programmers cannot afford to be vague; programming languages call for precise definitions.

Creare liste

Some people write down a to-do list every morning. During December, many children prepare Christmas wish lists. To plan a party, we make a list of invitees. Arranging information in the form of lists is a ubiquitous part of our life.

When we form a list, we always start out with the empty list. In BSL, we represent the empty list with

'()

la lista vuota (empty).

Aggiungiamo qualcosa a una lista con cons:

l0

La lista contiene due campi: first e rest. Così:

l1

Usando ripetutamente cons possiamo aggiungere elementi alla lista:

l2

Quello che capita è questo:

l3

Poi il resto lo leggete di là, vero?
Come pure la spiegazione che '() è un tipo di dato atomico distinto da ogni altro tipo di dato. C’è anche l’esempio. empty? è un predicato (finisce con ?) cioè ritorna un booleano, vero se vuoto:

l4

Next we turn to cons. Everything we have seen so far suggests that cons is a constructor just like those introduced by structure type definitions. More precisely, cons appears to be the constructor for a two-field structure: the first one for any kind of value and the second one for an list-like value.

Continuate di là, arrivando al riepilogo in figura:

l5

Tutto da leggere di là programmare con le liste, calcolare con le liste e progettare con definizioni di dati autoreferenziali con gli esercizi.

Liste non vuote

Now you know enough to use cons and to create data definitions for lists. If you solved (some of) the exercises at the end of the preceding section, you can deal with lists of various flavors of numbers, lists of Boolean values, lists of images, and so on. In this section we continue to explore what lists are and how to process them.

C’è un esempio semplice e dettagliato che al solito è da vedere nell’originale.

E poi…

Niente, tutto da leggere di là, lungo ma semplice. Riprendo, forse con più cose mie da qui: Design by Composition.

:mrgreen:

Visto nel Web – 189

Condizioni di salute non tanto buone ma poi mi passa –forse, spero :wink:
Intanto ecco cosa ho visto nel Web.

Stephen Bourne

Stephen Bourne

Two Years After Snowden Leaks, Encryption Tools Are Gaining Users
::: Slashdot

Why I still prefer Scala after Java 8 was released
::: Scala vs JDK8

Blaise Pascal would have used EMACS!
::: Google+

40% of Europeans don’t have basic digital skills
::: DigitalAgendaEU

Mi fa piacere che hai solo 4 preferiti e che uno sia mio!
::: f_126_ck

sac150618

Smartphones are really a generational change in scale for the industry
::: BenedictEvans

1 In 3 Data Center Servers Is a Zombie
::: Slashdot

LLJS : Low-Level JavaScript
::: mbebenita

Quasar and Kotlin – a Powerful Match
::: Parallel Universe

Racket v6.2
::: Google Groups

CHkj5UEWgAA_n0e

They started using Linux
::: climagic

Can Wikipedia Survive?
io sono convinto di sì :grin:
::: The New York Times

History of the First Crypto War
::: Bruce Schneier

The UNIX Philosophy and Elixir as an Alternative to Go
non so se è vero, chissà…
::: Aaron Lebo

La U.S. Navy paga oltre 9 milioni di dollari per mantenere il supporto a Windows XP
::: Downloadblog

Finally… the process to replace JavaScript has begun
::: coolscala

CIBPNhAWcAA4yrx

The Internet That Was (and Still Could Be)
::: _arianna

jooby – do more, more easily
::: jooby

I modelli di business del software libero
::: Tech Economy

Lasciate che Snowden ritorni negli Stati Uniti e possa difendersi sollevando l’eccezione di avere agito nell’interesse pubblico
::: Consiglio d’Europa

Il documento NSA che prova la presenza dell’unità SCS a Parigi – e Roma
::: fabiochiusi

IMG_8398

Algorithmic wizardry
::: The Endeavour

LaTeX, Microsoft Word, effort, and document complexity
::: MartensJD

Apple co-founder Steve Wozniak says humans will be robots’ pets
alle volte Woz :lol:
::: fabiochiusi

Il Social di papà
::: Il Tecnico Informatico

The Next Java Update Could Make Yahoo Your Default Search Provider
::: Slashdot

11402954_10152987468070687_4229105583131147704_n

Ce la faremo eh, ma la strada è in salita ripida ripida!
::: flavia_marzano

Who Controls Your Computer? (And How to make sure it’s you)
::: Faré’s

Rust 1.1 stable, the Community Subteam, and RustCamp
::: The Rust Programming Language

Early days of Unix and design of sh
::: BSDCan – The BSD Conference

NASA and Microsoft will send HoloLens into space by the end of this year
::: The Next Web

sac150624

astrofrog
a plugin to faciliate image comparison for Matplotlib figures in pytest
::: astrofrog

Riflessione: è ora di spostare la mail?
::: SIAMO GEEK

Oh no! Hitler blaming me in Italian for monads in C++ and demonic Haskell
::: BartoszMilewski

Ah, finally got my Emacs setup just how I like it
::: ieure

#finaki15it oggi il 38% degli italiani non conosce internet
::: luc_guglielmi

tumblr_nqg9ngF5Cr1qboyowo1_500

Dice il saggio da scrivania
::: AngioniSimone

Siete in cerca di tutorial per Arduino?
::: Google+

Non lasciate che l’open source sia una battaglia di parte
::: Marco’s Box

Il ritorno di WikiLeaks
::: Chiusi nella rete

OneWeb Secures “Largest Ever” Rocket Acquisition For Satellite Internet Launch
::: Slashdot

CIe1jg1WEAAZW9s

Portable Utah Standard LISP
::: blakemcbride

L’uccellino che spia dove ti trovi. Ma questo non è un opt-out!
::: Quinta’s

free data science books
::: The Ubuntu Incident

words of wisdom from StackOverflow :)
::: imRahulSoni
wpbanner

HtDP – Tipi di dati – 8 – strutture

w_006Continuo da qui, leggendo studiando qui.
Sono in condizioni di salute non proprio perfette, provo lo stesso a rackettare, chissà :wink:

Strutture

Il prof ci fa capire come i tipi di dati che abbiamo visto finora praticamente non ci bastano.
Every programming language provides some mechanism for combining several pieces of data into one piece and for retrieving the constituent values. BSL is no exception; it offers structure type definitions as the fundamental mechanism for combining several values into one. In general, a structure type definition introduces many different functions into the available vocabulary, including one that creates structure instances—structures for short—and several others that extract values from instances.

Da qui parte tutta una lunga lezione, chiarissima, non riassumibile per cui tutti di là. Sono cose che chi conosce altri linguaggi di programmazione OOP ha già visto più volte, i nuovi le scopriranno in modo chiaro e semplice.

Mi sa che mi sono cacciato in un pasticcio, dal quale non so ancora come uscirne. Il fatto è che HtDP è fatto troppo bene, non c’è niente da aggiungere, se non “oh!”, “ah!”, “ecco”.
Però il prof queste cose le sa, difatti passa a Intermezzo: BSL dove confessa:

Thus far we have approached teaching BSL as if it were a natural language. Like toddlers, we first taught you the vocabulary of the language with an intuitive understanding of its meaning. Next we exposed you to some basic rules of how to compose and not to compose sentences. Truly effective communication, however, requires some formal study of a language’s vocabulary, grammar, and meaning.

Viene definito il vocabolario, composto da nomi (variabili). Ognuno dei quali può essere una primitiva (+, sqrt) o una variabile, un valore, un numero, un booleano, una stringa o un’immagine.
Si passa poi alla grammatica, che per BSL è più semplice di quella degli usuali linguaggi. E mi sa che è tutto da vedere di là.
Nel frattempo ci penso su a come continuare questi post. L’idea è di trovare le parti in cui si può interagire lasciando la teoria.

Prossimamente… :mrgreen:

HtDP – Tipi di dati – 7 – gestire mouse e tastiera

nuovoDopo l’aggiornamento continuo da qui a seguire la lezione qui.

Controllare mouse e tastiera

OK! baro, ma da noi non si fa il plurale, specie se è irregolare, vero? :lol: Comunque avrebbe dovuto essere “A Note on Mice and Characters“.

Il programma di figura 11 mi ha fatto girare le scatole quanto basta, anzi di più. Intanto mancano i require, di cui uno da andare a cercare. Inoltre dopo l’installazione conviene riavviare (non so se necessario ma l’ho fatto). Quindi aggiungere prima della riga ; graphical constants queste istruzioni:

(require 2htdp/image)
(require 2htdp/universe)
(require test-engine/racket-tests)

salvare, lanciare (runnare?) e nella finestra interattiva eseguire (main 10), otterrete qualcosa come questo:

d15

I dettagli al solito li vedete di là. Il passo successivo, quello di figura 12 è per gli eventi di tastiera. Al solito mancano le tre istruzioni di require e poi con (main "test") ottenete questa meraviglia:

d16

OK? Adesso ci sono da fare gli esercizi; li fate vero?

Intervalli, enumerazioni e [uhmmm] itemizations

Finora abbiamo quatto tipi di dati: numeri, stringhe, immagini e booleani. Di solito bastano ma ci sono dei casi in cui non sono sufficienti. Quindi si va oltre. Matthias spiega molto meglio di me e allora mi sa che dovete andare di la.
Ci sono parecchie cose, importante per cominciare la spiegazione di cond (il case o select di altri linguaggi), la sintassi che a prima vista potrebbe sembrare strana, l’impiego delle parentesi quadre per rendere più leggibile il codice, anche se le tonde funzionerebbero ugualmente. Se c’è la clausola else (ma Wirth diceva che chi la usa non sa programmare (non ricordo dove ma forse in Algorithms + Data Structures = Programs)) dev’essere l’ultima.

Si passa poi alle enumerazioni, agli intervalli con esempio, e finalmente arriviamo a risolvere la parola mysteryousassay: An interval distinguishes different subclasses of numbers; an enumeration spells out item for item the useful elements of an existing class of data. Data definitions that use itemizations generalize intervals and enumerations.

Chiarite queste definizioni si passa al loro uso nel progettare programmi (4.6 Designing with Itemizations). Molto dettagliato e –al solito– non riassumibile.

Pausa, c’è molto da fare, riprenderò da 5 Adding Structure :mrgreen:

Visto nel Web – 188

Fa caldo; bere molta acqua. Beh, intanto ecco cosa ho visto nel Web.
11427193_10153346929087092_20642730700849273_n
#cookielaw: esame senza sconti degli ultimi “chiarimenti” del Garante
::: La mia privacy

Fortran, Clojure, Haskell and Julia are not at war
::: podsnap

ArnoldC
Programming language based on the one-liners of Arnold Schwarzenegger
::: lhartikk

OH: programming is easy
::: NuttySwiss

Spent 3 hours in a dentist chair today
::: bdkjones

tny

Leaving The Nest
::: codersnotes

OSI Affiliate Membership
::: Google+

Should Edward Snowden Trust Apple To Do the Right Thing?
::: Slashdot

Math factoid of the day: 53
::: Ned Batchelder

Linus Torvalds Says Linux Can Move On Without Him
::: Slashdot

192-copia

Lately I seem to live into #Emacs
anche lui! benché über sembra una persona normale :wink:
::: marcodelmastro

Sorpresa! E adesso come la mettiamo con “#Pinterest
::: giowile

Learning, And Unlearning
fondamentale
::: codersnotes

European Court: Websites Are Responsible For Users’ Comments
::: Slashdot ::: techdirt

Il social che visse due volte
da tener presente, chissà :grin:
::: Nuovoconsumo

sac150616

The Future of AI: a Non-Alarmist Viewpoint
::: Slashdot

dieci anni fa
::: .mau.

Dove non si parla di libri
insisto (e bravo Aubrey!)
::: Questo blog non esiste

Elop and Others Leaving Microsoft
::: slashdot ::: slashgear

Twitter buys a machine learning company
::: engadget

10487196_10206929948670213_4569585210421091976_n

Robots Are a Few of My Favorite Things
::: Computer History Museum

Gli ex fidanzati di Twitter
::: manteblog

ECMAScript 6 Is Officially a JavaScript Standard
::: Slashdot

Ricapitolando: se hai un blog coi cookie sei uno spione maledetto
::: Jovanz74

Twitter acquires machine learning startup Whetlab, will kill the service on July 15
::: VentureBeat

10945750_925137460857914_6224783050358466345_n

ScalaPlot
Library to plot simple graphs using a Scala frontend
::: ScalaPlot

WebAssembly: An Attempt To Give the Web Its Own Bytecode
::: Slashdot

Deep Learning And The Future Of Search Engine Optimization
::: TechCrunch

Minds.com: Anonymous lancia il suo social network
::: Data Manager Online

Jimmy Wales: London Is Better For Tech Than “Dreadful” Silicon Valley
::: Slashdot

10409179_798933396895077_78768027202986262_n

EFF: aumenta l’impegno dei colossi web per privacy e diritti degli utenti
::: Chiusi nella rete

GIMP: impossibile aprire file EPS, come risolvere il problema
::: Gioxx

The Tragedy of the Common Lisp, or, Why Large Languages Explode
::: ESDiscuss

DuckDuckGo Sees Massive Growth In Post-Snowden World
::: Slashdot

WikiLeaks follows up its Sony post with Saudi diplomatic cables
::: Engadget

IMG_0495

Details on Google’s massive cloud infrastructure revealed
::: ExtremeTech

How to Secure Passwords in Python with passlib
::: Connor Johnson

Unicode Consortium Releases Unicode 8.0.0
::: Slashdot

Spotted in the Open Lab Augsburg
::: larsr_h

11401110_10207196754577926_8714849418846162220_n

Google Told to Expect Large Fines in EU Antitrust Probe
::: fabiochiusi

Sorry mom I can’t come celebrate your birthday
::: iamdevloper

FARE: materiale didattico aperto e libero dal Politecnico di Torino
::: Luca De Biase
10460314_10153416849971115_815192814630537879_n

SICP in Clojure and LFE

e-catsChi frequenta il blog si sarà accorto che ultimamente mi sono innamorato del Lisp –quello vero, il CL, Common Lisp– e derivati. A dire il vero non è vero, è un amore antico ma è che abbiamo ripreso a frequentarci, incuranti di cosa dice la gente (che ci evita, nessuno legge i post a riguardo).

Adesso sono immerso in Racket, anzi in HtDP che poi è una cosa diversa ancora, mi sa che dovrò cambiare qualcosa in proposito a come lo tratto.
Uh! ‘na confessione (ma non ditelo a nessuno): continuo con i linguaggi evoluzione del Lisp ma cìè stata una grossa tentazione per Scala (e quindi anche Java) solo che non ce la faccio più a tenere i ritmi dei giovani. E personalmente ho visto che non riesco a fare cose con gente on cui non sono in contatto fisicamente, il web è bello ma non basta (sono vecchio?). Inoltre mi sembra che la prassi sia di produrre continui aggiornamenti, una beta perenne, scritta appunto da beta, diversamente da come Matthias (et al. certo ma repetita juventus!) raccomanda in HtDP.

Ma il Lisp è tanto; per esempio ci sarebbe da affrontare il SICP, quello di Scheme, come si deve, me lo sono detto tante volte e adesso pare sia superato, ci sono i rampolli generati da lui, come Racket. Si usa Racket al di fuori dell’Academia? Non lo so, non m’interessa più di tanto, almeno per ora.

euoenoMa ce ne solo altri, che fanno riferimento a SICP fin dal titolo. Ecco il primo: SICP In Clojure. La home parte con una citazione (di Hickey, il boss di Clojure) che è come minimo roboante. Viene voglia di saperne di più. E anche YMMV uno (forse solo io (me), ma forse no) deve andare su Urban Dictionary per capire che sta per “forse la pensate diversamente”. A proposito manca sempre la versione italiana di UD :evil:

Comunque, dice l’about: This is a version of the classic Structure and Interpretation of Computer Programs by Hal Abelson and Jerry & Julie Sussman, revised with code examples in Clojure instead of the original Scheme.

Ah! dice anche: I’m a newcomer to Clojure […], so I hope more experienced Clojurists will help out. I’ll be posting chapters bird by bird as I work through SICP myself, so it might be a while before the whole book is finished.

Bella la storia di bird by bird :grin: e poi sì, è un progetto in costruzione, con tutti i vantaggi del caso (il cappellino con la lucertola, yummm!) :grin:
Per adeso ci sono due capitoli, grandi, ricchi, con qualche link ancora 404 ma raggiungibili con deviazioni. E Connor Mendenhall rockz! :grin.

oubiwannC’è poi Structure and Interpretation of Computer Programs – The LFE Edition.

Anche qui siamo su un progetto su GitHub: This Gitbook […] is a work in progress, converting the MIT classic Structure and Interpretation of Computer Programs to Lisp Flavored Erlang. […] This is a huge project, and we can use your help!
Per adesso siamo a 2.2.4.11, si arriverà a 5.5.7 più i titoli di coda.
Il sito dice LFE translation by Duncan McGreggor, quindi dovrebbe essere lui l’autore.

Chissà… non so se sono io che seguo troppi lispers su Twitter o è il Lisp che sta avendo un revival o cosa. Forse è tutto legato al meme della programmazione funzionale (in HdTP per adesso non l’ho visto scritto mai e non voglio spoilerare ma…). Per quello ci sarebbe anche Haskell. Oltre a Scala che per il momento ho messo tra le cose da fare ma non urgentissimissime. E poi… Ok, panico! :mrgreen:

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 88 follower