Je vais être l'enseignement d'un bas-division des cours dans des structures discrètes. J'ai sélectionné le texte du livre des Structures Discrètes, la Logique et la Compilation en partie parce qu'il contient des exemples et des concepts qui sont propices à la mise en œuvre avec un langage de programmation fonctionnel. (Je pense aussi que c'est un bon livre.)
Je veux un facile-à-comprendre la langue FP pour illustrer DS concepts et que les étudiants peuvent utiliser. La plupart des élèves n'ont eu qu'un ou deux semestres de la programmation en Java, au mieux. Après en regardant le Schéma, Erlang, Haskell, Ocaml, et SML, je l'ai réglé sur Haskell ou de Standard ML. Je suis penchée vers Haskell pour les raisons exposées ci-dessous, mais j'aimerais l'avis de ceux qui sont actifs programmeurs dans l'un ou l'autre.
- Les deux Haskell et le SML ont filtrage qui permet de décrire un algorithme récursif un jeu d'enfant.
- Haskell a de belles interprétations de la liste qui correspondent bien avec la façon dont ces listes sont exprimées mathématiquement.
- Haskell a évaluation différée. Idéal pour la construction de l'infini des listes à l'aide de la liste de compréhension de la technique.
- SML a une réelle interprète dans les fonctions qui peuvent être à la fois défini et utilisé. En Haskell, les fonctions doivent être définies dans un fichier séparé et compilé avant d'être utilisés dans le shell interactif.
- SML donne une confirmation explicite de l'argument de fonction et types de retour dans une syntaxe qui est facile à comprendre. Par exemple: val foo = fn : int * int -> int. Haskell implicite de curry, la syntaxe est un peu plus obtus, mais pas totalement étranger. Par exemple: foo :: Int -> Int -> Int.
- Haskell utilise en précision arbitraire entiers par défaut. C'est une bibliothèque externe en SML/NJ. Et SML/NJ tronque de sortie de 70 caractères par défaut.
- Haskell lambda syntaxe est subtile -- il utilise une seule barre oblique inverse. SML est plus explicite. Vous ne savez pas si nous allons jamais besoin lambda dans cette classe, bien que.
Essentiellement, SML et Haskell sont à peu près équivalentes. Je me penche vers Haskell parce que je suis amoureuse de la liste des inclusions et infini listes en Haskell. Mais je suis inquiet que le grand nombre de symboles dans Haskell syntaxe compacte peut causer des étudiants de problèmes. De ce que j'ai recueillies en lisant d'autres posts, Haskell n'est pas recommandé pour les débutants de commencer avec FP. Mais nous n'allons pas être en bâtiment à part entière, il suffit de seulement essayer des algorithmes simples.
Qu'en pensez-vous?
Edit: À la lecture de certains de vos excellentes réponses, je me dois de préciser certains de mes points de balle.
En SML, il n'y a pas de distinction syntaxique entre la définition d'une fonction dans l'interpréteur et le définir dans un fichier externe. Disons que vous voulez écrire la fonction factorielle. En Haskell, vous pouvez mettre cette définition dans un fichier et le charger dans GHCi:
fac 0 = 1
fac n = n * fac (n-1)
Pour moi, c'est clair, succinct et correspond à la définition mathématique dans le livre. Mais si vous voulez écrire la fonction dans GHCi directement, vous devez utiliser une syntaxe différente:
let fac 0 = 1; fac n = n * fac (n-1)
Lorsque vous travaillez avec interactive interprètes, à partir d'un point de vue enseignement, c'est très, très pratique lorsque l'étudiant peut utiliser le même code dans un fichier et la ligne de commande.
Par "confirmation explicite de la fonction," je voulais dire que, lors de la définition de la fonction, SML tout de suite vous indique le nom de la fonction, les types d'arguments et le type de retour. En Haskell, vous devez utiliser l' :type de commande, puis vous obtenez quelque peu déroutant au curry notation.
Une chose de plus cool sur Haskell--c'est là une définition de la fonction:
fac 0 = 1
fac (n+1) = (n+1) * fac n
Encore une fois, cela correspond à une définition ils peuvent trouver dans le manuel. Ne pouvez pas le faire en SML!