Lambda 函数,该函数以极大值形式返回闭包

Lambda 函数,该函数以极大值形式返回闭包,lambda,closures,maxima,Lambda,Closures,Maxima,我如何定义一个函数来返回一个maxima中的闭包 我的具体例子是: 我有一份表格清单: myList : [a = 1, c = 33, d = c+7]; 我想根据等号前的部分排除一个元素 以下是我的尝试: find_a (e) := first(e) = a; temp1 : sublist(myList ,'find_a ); map('second, temp1); //output is "1" 这正是我想要的 因为真正的列表要长得多,我不想复制粘贴代码, 我现在想这样使用它: S

我如何定义一个函数来返回一个maxima中的闭包

我的具体例子是: 我有一份表格清单:

myList : [a = 1, c = 33, d = c+7];
我想根据等号前的部分排除一个元素

以下是我的尝试:

find_a (e) := first(e) = a;
temp1 : sublist(myList ,'find_a );
map('second, temp1);
//output is "1"
这正是我想要的

因为真正的列表要长得多,我不想复制粘贴代码, 我现在想这样使用它:

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"
但第一部分已经不起作用了:

SearchElement(a);
// output:
lambda([x],first(x)=ElementName)
// expected output:
lambda([x],first(x)=a)

这个解决方案对我很有效(基于maxima帮助中的“curry”示例,用于
buildq
,请参阅):

例如:

myList : [a = 4, b = 7, c = 5+b]$
ExtractElement(myList, b, identity);
// result: b = 7
ExtractElement(myList, c, second);
// result: b+5
myList : [a = 4, b = 7, c = 5+b]$
ExtractElement(myList, b, identity);
// result: b = 7
ExtractElement(myList, c, second);
// result: b+5