Em a primeira postagem do blog discutimos e aprendemos sobre a terminologia LISP, sintaxe e tipos de dados. Também vimos o uso básico de algumas funções introdutórias e como fazer uso desses conceitos. Se você é novo neste blog, eu recomendo pelo menos revisar aquela postagem do blog, se não a tiver lido na íntegra. Mas mesmo que você tenha optado por não revisar a postagem anterior, acho que poderá acompanhar este episódio e pegar um pouco do que foi discutido anteriormente.

ATENÇÃO: Este artigo no Blog é transcrito aqui no idioma Português-Brasil, mas pelo fato do artigo original ter sido escrito em Inglês, é possível que algumas instruções (especialmente: códigos) possam gerar conflito entre os idiomas. Sugiro consultar também os códigos de origem (na versão em inglês deste post) para garantir que seu trabalho esteja bem resolvido.

Nesta postagem do blog (e em algumas postagens futuras) nós vamos:

  • Usar o BLADE editor “prático” em BricsCAD
  • Progredir através de uma série de funções para aprimorar nosso conhecimento sobre LISP
  • Usar o Ajuda/Help (comando) para entender a sintaxe e os argumentos das funções LISP
  • Continuar a trabalhar com funções da postagem anterior
  • Criar um novo programa e explorar várias funções novas ao longo do caminho
  • Descobrir várias maneiras de obter o mesmo resultado

Para Revisar

Terminamos Black LISP - #01 com 6 linhas de código que permitiam ao usuário selecionar um ponto e ter um círculo centralizado naquele ponto com um raio especificado e outro círculo também centralizado no ponto selecionado com o raio aumentado em uma distância especificada:

(setq CPT (getpoint “Selecionar um ponto central:“))
(setq RAD (getreal “Entre um raio:“))
(setq OFF (getreal “Entre um valor do deslocamento:“))
(setq NEWRAD (+ RAD OFF))
(command “circle” CPT RAD)
(command “circle” CPT NEWRAD)

Help Center > Ferramentas de Desenvolvedor > Referência ao Desenvolvedor > LISP > Expanda as opções de LISP (LISt Processing) > Expanda as Funções de BricsCAD LISP

Não seria economizado muito tempo se tivéssemos que digitar essas linhas de código toda vez que quiséssemos desenhar um círculo de deslocamento duplo. Armazenar nossos programas LISP como arquivos individuais é o começo da resposta para esse problema.

  1. Inicie BricsCAD e digite BLADE no prompt. A seguinte janela será aberta:LISP Blade
  2. Copie as 6 linhas de código acima e cole-as na janela do documento, assim:Editor blade LISP
    Nota: Você precisará excluir cada uma das 10 aspas e digitá-las novamente. A fonte no artigo do blog não é compatível com o editor BLADE em relação às aspas.

Não entraremos em todos os benefícios do editor BLADE neste episódio, mas observe que ocorre um código de cores. Isso pode ser útil, especialmente durante os primeiros passos, pois os “erros de digitação” podem se destacar um pouco:

  • Nomes de funções
  • Strings de texto (entre aspas)
  • Símbolos
  • Números

Quase temos um programa de trabalho. Precisamos agrupar essas linhas de código como “uma unidade”. A função (defun) faz exatamente isso.

(expressão de símbolo de lista defun expressão expressão ...)

Esta função cria uma função definida pelo usuário que pode ser usada apenas como funções “embutidas” ou como um comando. Requer pelo menos três argumentos.

  1. Uma lista. Esta lista pode estar vazia. Usaremos uma lista vazia até que estejamos prontos para discutir isso mais profundamente, mais tarde.
  2. O nome da função queremos definir. Se o nome da função começar com “c:”, o nome da função pode ser digitado diretamente no prompt como qualquer outro comando definido.
  3. Argumentos restantes - as expressões que você gostaria que a função definida executasse.

Adicione o seguinte código no editor:

guia de codificação LISP aprender

Nota: Se as cores do gráfico não corresponderem à sua tela, você pode ter esquecido de excluir e redigitar as aspas.

Não queremos cometer um dos erros mais comuns na programação e no CAD em geral - Salve o arquivo! Selecione o ícone Salvar que todos nós conhecemos e amamos (mesmo que muitos de vocês nunca tenham usado um disquete!). A barra vermelha entre os números das linhas à esquerda e o novo código à direita significa que essas linhas foram modificadas desde o último salvamento. Eu criei uma pasta em uma unidade USB chamada LISP, então vou navegar até essa pasta e usar OffsetCircles para o nome do arquivo. O editor anexará automaticamente a extensão .lsp.

É uma boa prática usar “indentação” para tornar o código mais legível / apresentável. Faça isso de forma adequada e automática com o editor BLADE. Selecione o botão “Reformatar (embelezar)”:

blade LISP BricscAD editor

Agora temos um programa de trabalho e precisamos testá-lo. Selecione o botão “Carrega o arquivo Lisp atual no BricsCAD” e, a seguir, selecione o botão “Mudar para a Janela do BricsCAD”. O arquivo de desenho em BricsCAD agora deve estar ativo.

No prompt, comece a digitar “OffsetCircles”. Observe que todos os comandos que começam com os primeiros caracteres aparecem em uma lista de atalhos e que “OffsetCircles” já está incluído na lista. Você pode usar as teclas de seta para destacar “OffsetCircles”, e seguindo as instruções do programa.

Outra forma de carregar um arquivo de programa lisp e torná-lo disponível para uso é usar a função (carregar) diretamente no prompt Comando :, como tal: Comando: (carregar “offsetrcircles”) O “.lsp” não é obrigatório, embora você pode adicioná-lo se isso o deixar mais confortável. Um caminho não é necessário se BricsCAD tiver a localização do arquivo dentro de seu caminho de pesquisa. Se o arquivo não estiver no caminho de pesquisa de BricsCAD, a sintaxe para incluir o caminho e o nome do arquivo é:

Comando: (carregar “c: \\ algum-onde-outro \\ box1”)

Nosso programa só continuará funcionando enquanto este sorteio estiver aberto. Os programas LISP estão ativos apenas nos desenhos em que foram escritos ou carregados. Assim que um novo desenho é iniciado ou o programa BricsCAD é fechado e então reaberto - perdemos nossas rotinas de ceceio carregadas. Em postagens futuras, discutiremos muitas maneiras de tornar os programas LISP disponíveis o tempo todo, automaticamente.

O Editor BLADE

Agora que conhecemos o LISP e usando o editor BLADE, vamos começar um novo programa. Vamos criar 7 ou 8 versões do programa, com cada versão introduzindo uma nova função e conceito.

  1. Se ainda não estiver aberto, abra o editor BLADE: digite BLADE no prompt de comando: Enter.
  2. Selecione o ícone “Novo” no canto superior esquerdo do editor.
    O editor pedirá o nome do arquivo a ser criado.
  3. Digite “Box1” para o novo nome e digite as seguintes linhas de código:
    Com base no que aprendemos, essas linhas de código devem fazer sentido.
  4. Depois de inserir todo o código, selecione o Salvar .
  5. Selecione a ferramenta “Load lisp…”, a ferramenta “Switch to BricsCAD” e digite “BOX1” no prompt. (Deve aparecer na lista de atalhos)
    Se o seu código não funcionar corretamente (“trava/crash”), compare o gráfico acima com o seu código digitado - eles devem corresponder exatamente!

Um novo conceito foi introduzido neste código - forçando o texto a aparecer na próxima linha. Você deve ter notado que com nosso programa OffsetCircles, os prompts solicitando a entrada do usuário apareciam sucessivamente, um após o outro na mesma linha no prompt de comando. Com as strings de prompt para os pontos em nosso novo programa, cada prompt começa com um “código de controle” de “\ n….”. Isso força BricsCAD a mostrar o texto em uma nova linha ou na próxima linha do prompt de comando.

Duas coisas a ter em mente: deve ser o caractere de barra invertida e deve ser um “n” minúsculo.

Este é um exemplo do que é chamado de “programação polida”. O usuário espera que a próxima coisa a fazer seja mostrada na próxima linha. É assim que quase todos os comandos BricsCAD “funcionam” e, como programadores, devemos tentar corresponder à maneira BricsCAD de fazer as coisas.

Mais Programação Polida

A seguir estão técnicas e funções adicionais de programação polida. A maioria deles será usada em quase todos os programas que você criar.

(getvar str)
(setvar str val)

Freqüentemente, um programa modifica as configurações em BricsCAD para permitir que o programa seja executado de maneira mais suave com menos interação do usuário. É uma prática comum e uma cortesia comum armazenar os valores das configurações que serão modificadas, de modo que possam ser restaurados após a conclusão do programa.

(prompt str)

A função de prompt é usada para exibir o argumento da string na linha de comando. Muitas das funções do usuário (getxxx) oferecem a opção de incluir um prompt, mas às vezes o programador deseja fornecer ao usuário um pouco mais de informação. É quando a função (prompt) pode ser usada.

(princ str)

Esta função é uma ferramenta de solução de problemas e também pode ser usada como uma ferramenta de “limpeza”. Ele pode ser usado com um argumento de string opcional. O nome da função (princ) é usado para “imprimir” no “c”onsole (a linha de Comando). Quando usado sem o argumento string, nada acontece. Mais sobre isso na próxima seção.

Atualizando nosso programa com esses novos conceitos

Você deve ter notado que quando o novo comando BOX1 foi executado, tudo o que foi executado dentro da linha de código que incluía a função (comando) foi “ecoado” na linha de comando:
lâmina de linha de comando LISP
Isso pode ser benéfico ao escrever novos programas. Se o programa contiver um erro, você pode ver exatamente em qual parte da linha do comando, as coisas podem ter dado errado. Depois que um programa está sendo executado corretamente, é uma prática comum desativar o eco desse comando.

Você também deve ter notado que depois da última coisa que nosso programa fez - digitar um “c” para fechar o polígono que desenhamos - aquele “nil” ecoou na tela. Devemos lembrar que toda função que usamos “retorna” um valor. No caso da expressão (+ 1 1), a função de adição retorna o resultado da adição de 1 e 1 juntos, e 2 é retornado. A função (command) sempre retorna “nil”… pense nisso como um código para “feito”… É uma boa técnica de programação não permitir que esse “nil” seja ecoado na linha de Comando.

Vamos incorporar todos esses novos conceitos em nossa rotina BOX. No interesse da revisão e do aprendizado, cada vez que fizermos uma alteração em nosso programa, iremos salvá-lo como um arquivo numerado sequencialmente e alteraremos sequencialmente o nome do comando. Faça as seguintes adições de código ao programa:

Quando terminar de fazer as alterações, use o Salvar como ferramenta e use Box2.lsp como o novo nome de arquivo.

Uma discussão linha por linha do que mudamos e adicionamos:

Linha 1:

Mudou o nome do comando sendo definido para BOX2

Linha 2:

Adicionada a função “getvar”, aninhada na função (setq). Isso obtém e armazena o valor atual da variável de sistema CMDECHO.

Linha 3:

Adicionada a função (setvar), definindo o valor da variável de sistema CMDECHO como 0 (desligado).

Linha 4:

Adicionada a função (prompt), permitindo ao usuário saber o que o programa irá fazer. (Isso nem sempre é necessário e provavelmente é um pouco "exagerado" neste caso, mas eu queria mostrar como funciona!)

Linhas 5-9:

Sem alterações.

Linha 10:

Adicionada a função (setvar) para alterar a variável de sistema CMDECHO de volta ao que era antes de alterá-la para 0.

Linha 11:

Adicionada a função (princ) sem nenhum argumento. A função (princ) retorna o valor de qualquer argumento que seja passado a ela. Nosso uso tortuoso é passar “nada” para ele, então “nada” é retornado! Como é a última linha do nosso programa, temos o que é comumente referido como uma “saída limpa”.

Linha 12:

Este é simplesmente o parêntese de fechamento para a função defun de abertura na linha 1.

Quando você estiver confiante com a discussão linha por linha:

  1. Selecione a ferramenta “Format”
  2. Selecione a ferramenta “Load lisp…”.
  3. Selecione a ferramenta “Mudar para a Janela do BricsCAD”.

Essas três etapas sempre devem ser realizadas após cada “edição” e não serão especificadas a partir de agora.

Digite BOX2 na linha de comando e observe que o programa funciona de maneira um pouco mais “limpa”:

codificação com BLADE LISP

Então, aí está - uma boa introdução ao editor BLADE e algumas técnicas de programação polidas. O próximo post cobrirá mais técnicas de programação polidas e uma introdução à interceptação de erros