No começo, parecia pouco intuitivo, mas agora acho maravilhoso, e já fiz a leitura. Na verdade, é assim que falamos: "A soma de ..., o produto de ..." No entanto, exige um tipo diferente de leitura. Agora você simplesmente aplica o operador a todos os argumentos, em vez de lê-los em uma linha.
Mark C
O que há de errado com a notação de prefixo? Quase todos os idiomas estão usando. As chamadas de função quase sempre são prefixo.
SK-logic
Na verdade não; "intuitivo" é intuitivo porque você o aprendeu em uma forma de convenções matemáticas por mais de 20 anos. Como apenas o LISP e talvez alguns outros idiomas usam essa convenção, e você ainda aprenderá a outra muito mais, ela dificilmente se tornará igualmente "intuitiva". E estamos falando apenas expressões simples aqui (2 + 3 ... como você gostaria de experimentar um forro de "meia página" :)?
Rook
Respostas:
6
A leitura mental da esquerda para a direita, como a linguagem falada com os verbos adequados, pode ajudar. Por exemplo (+ 3 2) pode ser "adicione três e dois". No caso mais geral, você pode dizer "executar $ operação em $ operandos". Aplicado ao mesmo caso: "Execute a operação de adição nos três e nos dois".
Você usaria perguntas retóricas. :) Igual? (O que?), "1 e 2 (Erm ... Não ...)!
Arafangion
@RiceFlour (Ei, eu cresci comendo coisas feitas com farinha de arroz - tenho um problema de glúten.) Eu leria "Um é igual a dois?" Ou "Os seguintes são iguais?" Os operadores maior que e menor que não são tão naturais na forma de prefixo, mas eu me pergunto com que frequência eles são usados no código Lisp.
Mark C
7
Truques? Pelo que?
Ainda não parece intuitivo para você porque seu analisador mental não está acostumado a isso. Vai ficar melhor se você apenas usá-lo e lê-lo repetidamente.
Eu nem sequer ler que muito dele, mas agora eu acho que é maravilhoso. Parece que meu cérebro está começando a ter um senso quase "tátil" sobre os parênteses. Eu acho que o sentimento só se tornará mais aguçado.
Mark C
5
Você pode pensar nisso como um tipo de chamada de função:
(operator operand1 operand2 ...)
Não há nada de muito especial nisso. Se você sobrecarregar os operadores em C ++ (e em muitas outras linguagens que o permitem), geralmente precisará definir esse tipo de função exatamente dessa maneira:
Sim, é assim que eu faço. Se você voltar atrás e observar as chamadas de método em Java, C # etc., na verdade, elas são apenas uma notação de prefixo com parênteses em um local um pouco diferente: MyMethod (arg1, arg2).
Nlawalker
4
Muitos idiomas usam uma mistura de prefixo, infixo e até postfix.
Lisp apenas usa apenas prefixo - por padrão. Se o pecado (x) é intuitivo em relação à matemática, então (pecado x) não está longe. Se mover (cachorro, casa) é uma chamada de procedimento tradicional, então no Lisp é apenas (mover cachorro para casa).
O Lisp não abre nenhuma exceção para matemática e trata +, -, * e outros, como chamadas de funções comuns.
Quando (eventualmente) "Tudo é uma chamada de função" (ou uma forma especial ou uma macroexpansão, ambas com a sintaxe superficial da "chamada de função") clicada, parecia bastante natural.
Então, (= 1 2)eu li isso como 'chame a comparação numérica igual a 1 e 2'.
Respostas:
A leitura mental da esquerda para a direita, como a linguagem falada com os verbos adequados, pode ajudar. Por exemplo (+ 3 2) pode ser "adicione três e dois". No caso mais geral, você pode dizer "executar $ operação em $ operandos". Aplicado ao mesmo caso: "Execute a operação de adição nos três e nos dois".
fonte
( = 1 2 )
e( > 4 2 )
Truques? Pelo que?
Ainda não parece intuitivo para você porque seu analisador mental não está acostumado a isso. Vai ficar melhor se você apenas usá-lo e lê-lo repetidamente.
fonte
Você pode pensar nisso como um tipo de chamada de função:
Não há nada de muito especial nisso. Se você sobrecarregar os operadores em C ++ (e em muitas outras linguagens que o permitem), geralmente precisará definir esse tipo de função exatamente dessa maneira:
fonte
Muitos idiomas usam uma mistura de prefixo, infixo e até postfix.
Lisp apenas usa apenas prefixo - por padrão. Se o pecado (x) é intuitivo em relação à matemática, então (pecado x) não está longe. Se mover (cachorro, casa) é uma chamada de procedimento tradicional, então no Lisp é apenas (mover cachorro para casa).
O Lisp não abre nenhuma exceção para matemática e trata +, -, * e outros, como chamadas de funções comuns.
fonte
Quando (eventualmente) "Tudo é uma chamada de função" (ou uma forma especial ou uma macroexpansão, ambas com a sintaxe superficial da "chamada de função") clicada, parecia bastante natural.
Então,
(= 1 2)
eu li isso como 'chame a comparação numérica igual a 1 e 2'.fonte