Lua est plus un concurrent direct dans le script de l'arène est Python. Donc, souvent, il obtient en comparaison avec Python, mais j'ai entendu de nombreuses fois que Lua est très bien comme Lisp(Schéma) en termes de puissance expressive et la flexibilité.
Maintenant, je suis un Lua power-user, d'en connaître les subtilités, mais je l'ai seulement essayé Lisp une ou deux fois, alors, évidemment, je ne suis pas un expert, donc je me demandais quel genre de fonctions Lisp ont que Lua est manquant, le cas échéant?
Edit: Quelques résultats:
La lecture de Greg Hewgill suggéré par l'article et de l'article de Wikipédia j'ai trouvé les points suivants:
Certains points communs:
-Dans le Code Lisp vous avez Lambda, même avec Lua
-En Lisp Code et les Données sont les mêmes, même avec Lua (Voir l'exemple de code ci-dessous).
-Dans les fonctions Lisp ne sont pas spéciaux, même avec Lua.
-En Lisp, Tout est stocké dans un arbre de la mode, même avec Lua (pas aussi évident, mais son cas)
-En Lisp vous avez des S-expressions, en Lua l'ensemble de l'environnement est un tableau, et les tables ont le pouvoir de S-expressions, donc c'est probablement la même, pas sûr.
-Les deux Langues ont une véritable queue-l'appel de la sémantique
-Lisp a seulement des Atomes et des Listes, Lua a uniquement des Variables et des Tableaux, le résultat final, et la puissance est la même (je pense)
Lisp peut le faire, mais nécessitent des techniques de pointe, ou ne peut pas être fait en Lua
-En Lisp, vous pouvez faire les opérateurs de quoi que ce soit, c'est un peu possible avec Lua, mais il faut metatables, et donc les opérateurs peut être rien pour certains des fermetures et des objets, mais pas à l'échelle mondiale.
-En Lisp vous avez des Macros, En Lua vous n'avez pas, mais vous avez metatables. Je ne peux pas penser à un truc que vous pourriez faire avec les Macros qui ne peut être fait avec Lua régulier de la syntaxe, mais de son point de. (Voir MetaLua ci-dessous pour un exemple de la vraie Macro extension et la façon dont cela peut être fait en Lua)
-Lisp a préfixe de notation (+ 1 2 3 4), Lua ne dispose pas de cette
-en Lisp, vous pouvez combiner les paramètres de la Fonction "obligatoire, facultatif, mot-clé, et le reste des paramètres", dans Lua il n'y a pas de distinction entre les paramètres, de sorte que vous devez vérifier à la main
Lua peut le faire, et je n'ai aucune idée si Lisp peut le faire
-En Lua, vous pouvez échanger les fermetures et les environnements (global) et à l'exécution, peut Lisp faire cela?
-En Lua, vous pouvez échanger les metatables (similaire à C++ tables virtuelles, mais plus puissant) sur les objets et de les modifier à tout moment, lors de la compilation ou de l'exécution, peut Lisp faire cela?
-En Lua, vous avez entièrement fonctionnel fermetures, ne Lisp ont?
-En Lua tables peuvent devenir des foncteurs, peut Lisps listes de le faire? (Je pense que les S-expressions permettre cela, mais pas sûr)
Lisp-comme les Macros a également été mis en œuvre en Lua en tant que tel avec MetaLua de la bibliothèque:
----------------------------------------------------
-- Lambda-Calculus evaluator (weak head normal form)
----------------------------------------------------
-{ extension "match" }
function replace(var, newval, term)
match term with
| `Var{ v } if v==var -> return newval
| `Var{ _ } -> return term
| `Apply{ f, x } ->
return `Apply{ replace(var, newval, f), replace(var, newval, x) }
| `Lambda{ v, _ } if v==var -> return term
| `Lambda{ v, b } ->
return Lambda{ v, replace(var, newval, b) }
end
end
function reduce_whnf(term)
match term with
| `Apply{ `Lambda { param, body }, arg } ->
local x = replace (param, arg, body)
return reduce_whnf(x)
| _ -> return term
end
end
Il y a les sceptiques qui pensaient que Lua est en fait le code et les données, donc je vais tirer un exemple et une citation de la notice:
Ce ci-dessous de Code ou de Données en fonction de comment vous le regardez, parce que l'entrée est peut-être rien, il peut facilement traiter les données ci-dessous, mais que les données soufflet pourrait aussi être quelque chose de plus semblable à un code. De toute façon je n'ai pas vu d'exemple de Lisp faire quelque chose de code-données liées que Lua ne peut pas faire aussi facilement. Si un exemple de Lisp est disponible, je vais essayer de le faire correspondre avec Lua, si je ne suis pas tout à fait tort.
entry{
title = "Tecgraf",
org = "Computer Graphics Technology Group, PUC-Rio",
url = "http://www.tecgraf.puc-rio.br/",
contact = "Waldemar Celes",
description = [[
TeCGraf is the result of a partnership between PUC-Rio,
the Pontifical Catholic University of Rio de Janeiro,
and <A HREF="http://www.petrobras.com.br/">PETROBRAS</A>,
the Brazilian Oil Company.
TeCGraf is Lua's birthplace,
and the language has been used there since 1993.
Currently, more than thirty programmers in TeCGraf use
Lua regularly; they have written more than two hundred
thousand lines of code, distributed among dozens of
final products.]]
}
Et de citer le livre, il est dit:
La chose intéressante à propos de cette représentation est qu'un fichier avec une séquence d'entrées est un programme Lua
Aussi, voici un wikibook dans lequel l'auteur reproduit les exemples de code (en Lua) en vedette dans Paul Graham "Lisp". Comme preuve que Lua peut rien faire Lisp peut de la fonctionnelle de la programmation de la zone. (Avertissement, rappelez-vous que je ne suis pas un Lisper donc je ne peux pas en arrière cette déclaration personnellement)
Ici est une SORTE de lien vers quelques autres choses cool Lua peut le faire, que je ne sais pas si Lisp peut