最大値でクロージャを返す関数を定義するにはどうすればよいですか?
私の具体的な例:フォームのリストがあります:
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)