Question

SICP - "Structure et interprétation des programmes informatiques"

Explication de la même serait bien

quelqu'un peut-il expliquer à propos de métalinguistique Abstraction

Était-ce utile?

La solution

SICP vraiment conduit à la maison le point qu'il est possible de regarder le code et les données que la même chose.

Je compris cela avant quand la réflexion sur les machines universelles de Turing (l'entrée d'un UTM est juste une représentation d'un programme) ou l'architecture de von Neumann (où une seule structure de stockage contient à la fois le code et les données), mais SICP fait l'idée beaucoup plus clair. Schéma (Lisp) a aidé ici, comme la syntaxe d'un programme est exactement la même que la syntaxe des listes en général, à savoir S-expressions.

Une fois que vous avez la « équivalence » du code et des données, tout à coup beaucoup de choses deviennent faciles. Par exemple, vous pouvez écrire des programmes qui ont différentes méthodes d'évaluation (paresseux, non déterministes, etc ). Auparavant, je aurais pu croire que cela nécessiterait une extension du langage de programmation; en réalité, je peux l'ajouter à la langue moi-même, ce qui permet ainsi la langue de base soit minimale. Autre exemple, vous pouvez de la même mettre en œuvre un cadre orienté objet; encore une fois, cela est quelque chose que je pourrais avoir naïvement pensé, il faudrait modifier la langue.

Soit dit en passant, une chose que je souhaite SICP avait mentionné plus: types. Typage à compilation temps est une chose étonnante. La mise en œuvre SICP de la programmation orientée objet n'a pas eu cet avantage.

Autres conseils

Je ne l'ai pas lu ce livre encore, je n'ai regardé les cours vidéo, mais il m'a beaucoup appris. Fonctionne comme des citoyens de première classe était hallucinante pour moi. L'exécution d'une « variable » était quelque chose de très nouveau pour moi. Après avoir regardé ces vidéos la façon dont je vois JavaScript et la programmation en général a considérablement changé.

Oh, je pense que je l'ai menti, la chose qui m'a vraiment frappé est que + était une fonction.

Je pense que la chose la plus surprenante à propos SICP est de voir combien peu primitives sont réellement nécessaires pour faire une langue complète Turing -. Presque tout peut être construit à partir de presque rien

Puisque nous parlons SICP, je vais mettre dans ma prise standard pour les conférences vidéo à

Celui que je pensais était vraiment cool flux avec évaluation retardée. Celle de nombres premiers générateurs était quelque chose que je pensais était vraiment bien. Comme un distributeur « PEZ » qui distribue comme par magie le premier suivant dans la séquence.

Un exemple de « les données et le code sont la même chose » de la réponse de A. Rex m'a fait d'une manière très profonde.

Quand on m'a appris Lisp retour en Russie, nos professeurs nous ont dit que la langue était sur les listes: voiture, cdr, contre. Ce qui m'a vraiment étonné est le fait que vous n'avez pas besoin de ces fonctions à tout - vous pouvez écrire vos propres, les fermetures données. Donc, Lisp n'est pas sur les listes après tout! Ce fut une grande surprise.

Un concept que j'étais complètement familier avec l'idée était de coroutines , à savoir ayant deux fonctions faire des travaux complémentaires et ayant le contrôle des flux de programme alternatif entre eux.

J'étais encore au lycée quand je lis SICP, et je l'avais mis l'accent sur les premier et deuxième chapitres. Pour moi, à l'époque, je l'ai aimé que vous pouvez exprimer toutes ces idées mathématiques dans le code, et que l'ordinateur faire la plupart des travaux sales.

Quand je tutorat SICP, je suis impressionné par les différents aspects. D'une part, l'énigme que les données et le code sont vraiment la même chose, parce que le code est des données exécutables. Le chapitre sur les abstractions métalinguistiques est ahurissant pour beaucoup et a beaucoup de messages à emporter. La première est que toutes les règles sont arbitraires. Cela dérange certains étudiants, spécialement ceux qui sont des physiciens du cœur. Je pense que la beauté est pas dans les règles elles-mêmes, mais en étudiant la conséquence des règles. Un changement dans une ligne de code peut faire la différence entre une portée lexicale et la portée dynamique.

Aujourd'hui, bien que SICP est toujours amusant et perspicace pour beaucoup, je comprends qu'il est démodés. D'une part, il n'enseigne pas le débogage des compétences et des outils (I comprennent des systèmes de type là-bas), ce qui est essentiel pour travailler dans les systèmes gigantesques d'aujourd'hui.

J'ai été très surpris de la façon dont il est facile de mettre en œuvre des langues. Que l'on pourrait écrire un interprète pour le schéma sur un tableau noir.

Je me sentais récursivité dans un sens différent après avoir lu certains des chapitres de SICP

Je suis maintenant sur la section « Séquences d'interfaces classiques » et ont trouvé le concept des procédures comme des citoyens de première classe tout à fait fascinant. En outre, l'application de la récursivité est quelque chose que je ne l'ai jamais vu dans toutes les langues.

Bouchage.

Venant d'un premier impératif (Java, C #, etc. - je ne lis SICP un an il y a pour la première fois, et je suis en relisant maintenant), penser en termes fonctionnels a été une grande révélation pour moi; il a complètement changé la façon dont je pense à mon travail aujourd'hui.

Je lis la plupart partie du livre (sans exercice). Ce que j'ai appris comment faire abstraction du monde réel à un niveau spécifique, et comment mettre en œuvre une langue.

Chaque chapitre a des idées me surprennent:

Les deux premiers chapitres me montrent deux façons d'abstraire le monde réel:. L'abstraction à la procédure et l'abstraction des données

Le chapitre 3 introduit le temps dans le monde réel. Cela se traduit dans les Etats. Nous essayons mission, ce qui pose des problèmes. Ensuite, nous essayons cours d'eau.

Le chapitre 4 est sur le point abstraction métalinguistique, autrement dit, nous mettons en œuvre une nouvelle langue en construisant un évaluateur, qui détermine le sens des expressions.

Depuis l'évaluateur au chapitre 4 est lui-même un programme Lisp, il hérite de la structure de contrôle du système sous-jacent Lisp. Ainsi, au chapitre 5, nous plongeons dans l'opération étape par étape d'un véritable ordinateur à l'aide d'un modèle abstrait, machine à enregistrer.

Merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top