Comment puis-je définir une fonction qui renvoie une fermeture en maximum?Fonction qui renvoie une fermeture au maximum
Mon exemple concret: J'ai une liste de la forme:
myList : [a = 1, c = 33, d = c+7];
Je veux exctract un élément en fonction de la partie avant le signe égal.
Voilà ma tentative:
find_a (e) := first(e) = a;
temp1 : sublist(myList ,'find_a);
map('second, temp1);
//output is "1"
Cela a fonctionné comme je voulais.
Depuis la liste réelle est beaucoup plus longue et je ne veux pas copier-coller le code, Je veux maintenant l'utiliser comme ceci:
SearchElement(ElementName) := block(
[res],
res : lambda([x],first(x) = ElementName),
return (res)
);
GetByKey(list_,key_) := block(
[res , finder:SearchElement(key_)],
res : map('second, sublist(list_,'finder),
return (res)
);
GetByKey(myList, a);
// should return "1"
Mais déjà la première partie ne fonctionne pas :
SearchElement(a);
// output:
lambda([x],first(x)=ElementName)
// expected output:
lambda([x],first(x)=a)
Comment est-il lié à Lisp? – Ankur
maxima utilise le lisp en interne – Onur