2

Je lis" Introduction à la programmation fonctionnelle Première édition ". Je suis venu d'une règle de traduire la compréhension que,Comment est-ce que [e | x <- xs; y <- ys; ...] = concat [[e | y <- ys; ...] | x <- xs] `

[e | x <- xs; y <- ys; ...] = concat[[e | y <- ys; ...] | x <- xs] 

Je ne comprends pas concat ici. concat prend plusieurs listes mais ici j'en vois seulement une.

Je lis [[e | y <- ys; ...] | x <- xs] comme

for(x in xs){ 
for(y in ys){ 
    someList.push(e) 
} 
} 

Peut-être que je lis mal ou | Peut contenir une signification particulière ici.

Aidez-nous s'il vous plaît.

+0

'concat :: [[a]] -> [a]'. 'concat [[e | y <- ys; ...] | x <- xs] '--- vous obtenez ici une liste de listes, qui est ensuite dépliée vers une liste plate. – zerkms

Répondre

3

[[e | y <- ys; ...] | x <- xs] traduit à votre pseudo-langue serait:

for (x in xs) { 
    tmp = [] 
    for (y in ys) { 
     tmp.push(e) 
    } 

    someList.push(tmp) 
} 

et vous pouvez lire l'expression [[e | y <- ys; ...] | x <- xs] comme: « Pour chaque x dans xs produire une liste qui se compose de e pour chaque y en ys ».

concat a la signature suivante: concat :: [[a]] -> [a]

Il déplie les structures plissées.

Par conséquent concat [[1,2,3],[4,5]] =>[1,2,3,4,5]

+0

Je lisais mal, merci! – Abhishek

+0

@Abhishek Javascript 'concat' est' (++) 'dans Haskell, qui a le type' [a] -> [a] -> [a] '. Cependant, dans les tableaux JS ne doivent pas être homogène, bien sûr. – ftor