Pergunta

Estou no dia 1 hora 1 de me ensinar esquema. Escusado será dizer que não entendo nada. Então estou lendo O pequeno esquema E usando isso:

http://sisc-scheme.org/sisc-online.php

Como intérprete.

Eu preciso usar ' em por exemplo

(atom? 'turkey)

Para evitar um erro de "variável indefinida". o ', de acordo com o livro, é uma coisa comum.

Eu tenho duas perguntas:

  1. O intérprete que mencionei acima é bom? Você pode recomendar outro? Eu preciso de um que vai bem com O pequeno esquema.

  2. O que é '?

Foi útil?

Solução

A forma 'foo é simplesmente uma maneira mais rápida de digitar o formulário especial

(quote foo)

ou seja, "não avalie o nome Foo e substitua -o por seu valor; eu realmente quero dizer o nome Foo".

Eu acho que o SISC é perfeitamente bom para explorar os exercícios no TLS.

Outras dicas

Você precisa entender as regras básicas de avaliação do esquema.

Primeiro:

(atom? 'turkey)

A lista é um aplicativo de função, então atom? é avaliado em uma função.'turkey é uma notação de mão curta para (quote turkey). Avaliação (quote turkey) dá o símbolo turkey.

Então, em seguida, a função é aplicada ao símbolo turkey e um valor de retorno é calculado.

Segundo

(atom? turkey)

Novamente, temos um aplicativo de função e atom? é avaliado em uma função. Desta vez turkey é uma variável. Avaliação turkey Dá o valor que está ligado a isso - o que quer que seja.

Então a função é aplicada ao valor da variável turkey.

Resumo

turkey é uma variável, que é avaliada em seu valor. 'turkey é (quote turkey), que é avaliado no símbolo turkey.

O esquema reutiliza as expressões S e cria seus programas a partir das expressões S. Isso leva ao problema que algum dia turkey deve ser uma variável e às vezes deve ser o símbolo. Isso é um pouco confuso para o iniciante. Depois de algum tempo, você verá o poder por trás disso.

O SISC é bom, mas um executor de esquema online ainda mais leve é http://codepad.org. Na verdade, não é um REPL, pois não é interativo, mas é bem próximo. O código que você envia é executado no servidor lado em vez de usar um applet do navegador. E você pode compartilhar o código que está executando por URL curto.

o cerca de A página no CodePad diz que usa "MZSCHEME V372 [CGC].

Eu uso o CodePad para todos os tipos de testes rápidos de snippet (incluindo amostras de código de teste para respostas!).

Para a sintaxe da citação, a diferença pode ser vista usando código como este:

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

Isso exibe:

5
x

No primeiro caso, x é avaliado e passado para display, que imprime 5. No segundo caso, o símbolo x (que não é a mesma coisa que uma string de personagem) é passado para display, que imprime o nome do símbolo.

Abreviação de (quote ...), ' transforma código em dados.

stuff é um símbolo, isso significa que pode ser o nome de uma variável ou nome de uma função, etc.
'stuff Dá a você o símbolo "coisas" em si.

(dostuff "on" those 4 :parameters) Quando avaliado, executaria a função dostuff com quatro parâmetros: string, conteúdo da variável, número, número e palavra -chave.
'(dostuff "on" those 4 :parameters) Quando avaliado, retornaria o código acima, que, quando avaliado, por sua vez, executaria a função dostuff com esses quatro parâmetros ..

Por exemplo: execute '''somecode, ele retorna ''somecode. Corre ''somecode, ele retorna 'somecode. Corre 'somecode, ele retorna somecode. Corre somecode, e bem... somecode correrá.

Você pode dizer isso ' é um pouco como o oposto de (eval..).

(eval (eval (eval '''(print "hello")))) Imprimiria "Hello".
(eval (eval (eval ''''(print "hello"))) - Observe mais um ' então eval - não imprimiria nada, mas retornaria o código (print "hello") em si!!

Exceto que os lispers tendem a chamar esse código devolvido (e às vezes até código manuscrito) "Lista" em vez de "código", por razões que serão óbvias ao cavar um pouco mais profundamente. Boa sorte :)

  1. Eu sugiro que você se mude para um ambiente melhor como Esquema PLT, que tem um IDE, depurador e muitas bibliotecas. Ao avançar e começar a escrever programas maiores, você precisará deles.

  2. O caractere de citação única é o açúcar sintático para a expressão de "citação"; portanto, a Turquia é a mesma que (Quote Turkey). Basicamente, o que a "citação" faz é desligar o avaliador do esquema. Em outras palavras, "citação" retorna a expressão, literalmente. Se não houvesse "citação", o esquema tentaria avaliar a "Turquia" no ambiente atual. Isso não é uma coisa comum, mas uma coisa lisp. Lisp e esquema comum são dois dialetos de Lisp. Os usos da "citação" são explicados em todos os tutoriais/livros LISP. Veja também as respostas para essa questão.

O caractere de citação única é a maneira abreviada de dizer (citação Foo), onde a citação é o formulário para retornar apenas sem avaliá-lo.

Uma coisa a lembrar realmente no esquema ou em qualquer outro lado é que tudo é avaliado por padrão. Portanto, nos casos em que você não deseja avaliar, precisa de uma maneira de estar sentado.

A citar algo faz exatamente isso e a única citação é apenas menos digitação e leva a um código menos detalhado.

Se você está procurando um melhor IDE para scheme então vá para Dr Racket. Mas quando comece Dr Racket A primeira linha deve ser #lang scheme desde Dr Racket Tem muitos idiomas que mencionamos explicitamente qual idioma usaremos.

Quando queremos passar por um argumento em vez de passar o valor do argumento, usamos a cotação. Está relacionado principalmente ao procedimento que passa durante o uso de listas, pares e átomos que não estão disponíveis na linguagem de programação C (a maioria das pessoas começa a programar usando a programação C, portanto, ficamos confusos) Este é o código na linguagem de programação do esquema, que é um dialeto de Lisp E acho que você pode entender esse código.

(define atom?              ; defining a procedure atom?
(lambda (x)              ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f

A última linha (Atom? 'ABC) está passando pelo ABC como é para o procedimento para verificar se o ABC é um átomo ou não, mas quando você passa (atom? ABC), ele verifica o valor do ABC e passa o valor para isto. Desde então, não fornecemos nenhum valor para isso

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top