Un programme fonctionnel a une structure de graphe: des données sont utilisées par des fonctions et des résultats en sortent. Ces résultats sont utilisés par d'autres fonctions, et ainsi de suite. Une donnée peut-être utilisée plusieurs fois et c'est ce qui fait que le programme est un graphe et pas un arbre.
Un langage de programmation parfait représenterait le programme comme un graphe. C'est possible en représentant les fonctions comme des noeuds et les données comme des traits qui connectent les noeuds. Mais dès que le programme grandit il y a des traits dans tous les sens et on ne sait plus d'où ils viennent ni où ils vont.
Skov fait un compomis: il représente les programmes comme des arbres et non comme des graphes. Ça rend les programmes plus compacts, plus faciles à lire et plus faciles à écrire. Quand une donnée doit être utilisée plusieurs fois, on lui donne juste un nom.
Les langages de programmation textuels font beaucoup plus de compromis pour représenter le programme comme une suite de caractères à une dimension, en perdant presqu'à chaque fois la vraie structure du programme.
Skov veut dire forêt in danois parce que Skov contient beaucoup d'arbres.