Estou lendo o SICP recentemente para aprender a programação lisp.
Há um exemplo no livro para fazer uma soma de funções de alto nível, como abaixo.
(define (sum term a next b)
...
(term a)
...
(next a)
...
Nesta função, term e next são funções.
Eu quero escrever a mesma função no elisp assim.
(defun sum (term a next b)
....
(funcall term a)
...
(func next a)
....
Então eu defino algumas funções de teste para testar soma
(defun inc-test (x) (+ x 1))
sum inc-test 1 inc-test 10
mas mostra erros como este: Função inválida: inc-test
Como sou novo no elisp, alguém pode me dizer como consertar isso? muito aprecio
sum
?inc-test
no seu último exemplo é usado como uma variável, mas não é definido como uma variável (é uma função). Você precisa passar um símbolo ou uma referência de função parafuncall
. Portanto, uma maneira de corrigir seu código é passá-lo em'inc-test
vez deinc-test
(observe a citação).Respostas:
Para recapitular o que está nos comentários,
funcall
coloque entre aspas seu argumento (apenas acessando o argumento). E antes disso, também precisamos garantir que não tentemos avaliar ou acessar o valor do parâmetro de nome da função que é passado na chamada para a função.Portanto, uma resposta aceitável parece ser:
Ou basicamente ligue com
'inc-test
ou(quote inctest)
melhor queinc-test
.fonte