Jump to content
miguelsilva94

criar ficheiro .hs no terminal

Recommended Posts

miguelsilva94

Em SO mac OSX, em vez de usar o aquamacs para criar, gostava de usar o terminal. Sei que dá, já o vi a fazerem, já o fiz só que nao me recordo dos comandos a usar.

Googlei e nao encontrei nada.

Alguem me arranja a lista de comandos, sff?

Share this post


Link to post
Share on other sites
Rui Carlos

Basicamente precisas de um editor de texto que funcione na linha de comandos. O Vi (ou o Vim) são opções. Mas também tens Emacs (comando emacs), ou o Nano (comando nano), ambos instalados por omissão no OSX. Pessoalmente prefiro o Vim (nunca me entendi com os atalhos do Emacs), mas se estiveres habituado ao Aquamacs, o Emacs deve ser uma melhor opção.

Share this post


Link to post
Share on other sites
miguelsilva94

já agora, sabes como uso o editor vi com cores do género do aquamacs, por exemplo?

Share this post


Link to post
Share on other sites
pwseo

Tens que activar as funções para tal. Basta-te usar o comando :syntax on.

Ainda assim, aconselho-te a guardares o seguinte ficheiro .vimrc na tua home:

set nocompatible
syntax on
filetype plugin indent on

set backspace=start,eol,indent
set hlsearch incsearch smartcase ignorecase

Ficas assim com um conjunto de definições muito básicas mas bastante úteis, e de certa forma globalmente utilizadas (que poderás (e deverás) personalizar ao longo do tempo).

EDIT: isto se tiveres o vim. Não sei se o MacOS X traz consigo o vi ou o vim; o Rui Carlos saberá esclarecer melhor.

Edited by pwseo

Share this post


Link to post
Share on other sites
miguelsilva94

ok obrigado. mais uma perguntinha

no aquamacs, os parentesis retos nao funcionam, ou entao deve ser por outra combinaçao de teclas que eu nao sei. eu faço alt + 8 e nada....

Share this post


Link to post
Share on other sites
KiNgPiTo

Não uso mac, mas pelo que me lembro acho que é Alt + Shift + ( para abrir e o mesmo com ) para fechar..

Share this post


Link to post
Share on other sites
miguelsilva94

outra coisa. eu estou com um problema grave. o editor vi nao me deteta os tipos das funcoes.

exemplo, uma simples funçao para ver se uma lista é vazia

teste :: [a] -> Bool
teste [] = True
teste (x:t) = False

>[1,2,3]

[1,2,3]

devolve sempre a própria lista. ele não está a detetar os tipos

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
pwseo

Antes de mais, o editor não detecta tipos nenhuns, nem é esse o seu trabalho. Isso é o trabalho do interpretador (o ghci).

Adiante, quando escreves [1,2,3] no ghci, naturalmente ele devolve-te a lista... O que tu queres é aplicar a função à lista, assim:

> teste [1,2,3]
False

De qualquer modo, a tua questão está um pouco estranha. Tenta reformular para sabermos exactamente o que pretendes que aconteça.

Edited by pwseo

Share this post


Link to post
Share on other sites
miguelsilva94

sim, é o compilador e não o editor. O problema é que o ghci dá-me erros relacionados com os tipos que do meu ponto de vista não deveria dar. o exemplo que eu dei não era bem este.

para ver se um elemento pertence a uma lista

elem :: a -> [a] -> Bool
elem x(h:t) = if x == h
            then True
            else x:t
elem x[] = False

Couldn't match expected type `Bool' with actual type `[a]'
In the exp<b></b>ression: x : t
In the exp<b></b>ression: if x == h then True else x : t
In an equation for `elem':
    elem x (h : t) = if x == h then True else x : t
Failed, modules loaded: none.

está a ser frustante porque está-me a dar tudo erro

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
pwseo

Estamos a fugir ao âmbito do tópico inicial.

De qualquer modo, repara bem: a tua 1ª equação para elem tem dois ramos (devidos ao if): um deles devolve True (que é um Bool) e o outro devolve x:t, que é do tipo [a]. É precisamente isso que o compilador está a dizer-te... tu disseste (na assinatura da função) que o resultado será do tipo Bool, mas um dos ramos do if é de outro tipo.

Portanto, o problema é que não estás ainda à vontade com a linguagem :)

Para diminuir a frustração, vou solucionar-te este problema, com comentários:

elem :: a -> [a] -> Bool
elem x [] = False  -- nenhum elemento faz parte de uma lista vazia
elem x (h:t) =
 if x == h then True      -- se h for igual a x, então devolvemos True
           else elem x t  -- senão, chamamos elem recursivamente no resto da lista (variável t)

Repara bem no que eu fiz no else. Para compreenderes a solução é essencial saber em que consiste a recursividade.

Por onde estás a estudar? Isso anda um pouco confuso por aí...

Share this post


Link to post
Share on other sites
miguelsilva94

sim, nao estou a vontade com a linguagem nem lá perto. no entanto, percebi a solução. enganei-me a copiar da folha de rascunho para o editor.

estou a fugir ao assunto que já está esclarecido à muito.

obrigado pelas respostas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.