Comment définir une fonction dans ghci sur plusieurs lignes?
Je suis en train de définir une fonction simple qui s'étend sur plusieurs lignes dans ghci, prendre ce qui suit comme exemple:
let abs n | n >= 0 = n
| otherwise = -n
Jusqu'à présent, j'ai essayé en appuyant sur Entrée à la fin de la première ligne:
Prelude> let abs n | n >= 0 = n
Prelude> | otherwise = -n
<interactive>:1:0: parse error on input `|'
J'ai aussi essayé d'utiliser la :{
et :}
commandes, mais je ne suis pas loin:
Prelude> :{
unknown command ':{'
use :? for help.
Je suis en utilisant GHC version Interactive de 6,6 pour Haskell 98 sur Linux, ce qui me manque?
- Veuillez mettre à jour votre GHC installation. GHC 6.6 près de 5 ans! Les dernières versions de Haskell sont ici: haskell.org/platform
- double possible de Multi-ligne de commandes dans GHCi>
- Cette OP déjà essayé les solutions à ce problème. Ce problème est dû à un out-of-date, ghci, pas un manque de connaissances de quoi faire. Solution: mettez à niveau. La Solution: utiliser
:{
,:}
.
Vous devez vous connecter pour publier un commentaire.
pour les gardes (comme ton exemple), vous pouvez juste mettre le tout sur une seule ligne et il fonctionne (les gardes ne se soucient pas d'espacement)
si vous souhaitez écrire votre fonction avec de multiples définitions qui en correspondance du modèle sur les arguments, comme ceci:
ensuite, vous utilisez des accolades par des points-virgules séparant les définitions
GHCi a maintenant une multiligne-le mode d'entrée activé avec :set +m. Par exemple,
ghci
se comportent un peu comme l'interpréteur Python à cet égard. Très pratique! Vous pouvez en fait créer un.ghci
fichier dans votre répertoire dans lequel vous mettez:set +m
et multiligne mode devient la valeur par défaut chaque fois que vous démarrezghci
!:set prompt "λ "
le maintien de lignes de direPrelude
au lieu deλ
. Aucun moyen de contourner ce problème?let
. Il suffit de taper unlet
suivi par un saut de ligne:let
⏎. Puisfac 0 = 1
⏎. Puisfac n = n * fac (n-1)
⏎ ⏎ et vous avez terminé!:set prompt2 "| "
semble maintenant être:set prompt-cont "| "
. Vous ne savez pas quand le changement a été fait, mais je suis en utilisant GHC 8.6.3.Dan est correct, mais
:{
et:}
doivent apparaître sur leur propre ligne:Ce interagit également avec la mise en page de la règle, de sorte que lors de l'utilisation de do-la notation pourrait être plus facile d'utiliser des accolades et des points-virgules explicitement. Par exemple, cette définition ne fait pas:
Mais il fonctionne lorsque les accolades et les points-virgules sont ajoutés:
Cela ne sera vraiment d'importance lors du collage de définitions à partir d'un fichier, où les retraits sont susceptibles de changer.
Il ressemble
:{
et:}
sont une jolie nouvelle fonctionnalité. Vous pouvez avoir besoin de mise à niveau de GHC.Edit: confirmé, voir http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/release-6-8-2.html
Si vous ne souhaitez pas mettre à niveau GHC juste pour
:{
et:}
, vous aurez besoin de l'écrire sur une seule ligne:Je ne suis pas au courant d'une seule définition en Haskell qui doit être écrite sur plusieurs lignes. Le ci-dessus ne fonctionne en effet dans GHCi:
Pour d'autres expressions, telles que
do
blocs, vous aurez besoin d'utiliser la non-présentation de la syntaxe avec des accolades et des points-virgules (eugh).