如何定义一个以最大值返回闭包的函数?
我的具体例子: 我有一份表格清单:
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)
答案 0 :(得分:2)
此解决方案适合我(根据buildq
的最大值帮助中的“咖喱”示例,请参阅36. Function Definition):
ElementSelectorPredicate(targetElement) ::= buildq (
[targetElement],
lambda ([x], first(x) = targetElement)
);
ExtractElement(targetList, targetElement, operation) := block(
[searcher: ElementSelectorPredicate(targetElement), res],
res: first(sublist(targetList,'searcher)),
return (operation(res))
);
示例:
myList : [a = 4, b = 7, c = 5+b]$
ExtractElement(myList, b, identity);
// result: b = 7
ExtractElement(myList, c, second);
// result: b+5