2009-02-11 20 views
9

J'ai vu ce code dans Erlang:Erlang, la syntaxe de compréhension de la liste

[X-$0 || X<-someFun()] 

Dans cette ligne, je trouve la syntaxe -$0 très utile. J'ai lu le code et estimé ce que cela signifiait, mais je ne suis pas tout à fait sûr: est-il divisé tous les nombres?

Je voudrais voir l'explication ou la page de manuel de cette syntaxe mais je ne la trouve pas. Quelqu'un peut-il me montrer la bonne page?

Répondre

17

Ce que ce code fait est de prendre la sortie de someFun() (qui doit retourner une liste), et pour chaque élément de la liste, il attribue la valeur de l'élément à la variable X puis en soustrayant la valeur ASCII du caractère 0 à partir de cette valeur. La liste résultante est alors la valeur de cette expression entière. Ce qu'il fait, en pratique (et j'ai écrit ce code des dizaines de fois moi-même), suppose que someFun/0 est une fonction qui retourne une chaîne avec juste des chiffres, puis convertit cette chaîne en une liste de les chiffres. Ainsi, si someFun() a renvoyé "12345", le résultat de cette compréhension de la liste est [1, 2, 3, 4, 5].

Si vous êtes familier avec le concept d'une fonction map (comme dans MapReduce), cela devrait vous sembler familier.

Cette page Wikibooks ressemble à une bonne introduction à la liste Erlang compréhensions:

http://en.wikibooks.org/wiki/Erlang_Programming/List_Comprehensions

livre de Joe Armstrong "Programmation Erlang", du Pragmatic Bookshelf, (http://pragprog.com/titles/jaerlang/programming-erlang) couvre également la liste des compréhensions très bien (le long avec tout le reste lié à Erlang). Excellent livre, fortement recommandé, etc.

1

La page de documentation normale pour la liste compréhensions est dans la Erlang Reference Manual Section 6,22 et Programming Examples Section 3.

Ces deux éléments sont sur la main documentation page (cliquez sur le dossier de programmation Erlang sur la barre de menu de gauche).

La documentation Erlang est fabuleux - il est juste sa mise en page est un peu shonky ...

+0

Liens morts, ya peut-être envie de mettre à jour ce. – EvilTeach

+0

@EvilTeach * Liens Shonky. – providence

+0

Liens corrigés comme demandé. –