函数参数在 maxima 的 lambda 函数中不可用(curried 函数)

Parameter of function not available in lambda function in maxima (curried function)

我尝试在 maxima 中编写一个柯里化函数,但似乎无法在 lambda 函数中获取可用参数,这是我的代码:

structp(type) := lambda([struct], is(reveal(struct, 1) = type));

我希望它像这样工作,假设我有:

defstruct(a(b,c));
struct: a(1,2);
structp(a)(struct);

最后一个应该返回true,因为struct的类型是a

是否可以通过某种方式获取 lambda 函数中可用的参数?

我喜欢在这里使用柯里化函数,因为这样我可以写出像这样的短代码:

sublist(list_of_structs, structp(a));

在将 lambda 应用于参数之前,lambda 内的表达式不会被求值。例如。如果你有 f(y) := lambda([x], y*x) 那么 f(5) returns lambda([x], y*x) (不是人们可能想要的 lambda([x], 5*x))。

至少有几种方法可以获得您想要的结果。我想也许最直接的是f(y) := subst('y = y, lambda([x], y*x))。或者在你给出的例子中:

structp(type) := 
  subst ('type = type, lambda([struct], is(reveal(struct, 1) = type)));

然后根据需要structp(a)returnslambda([struct], is(reveal(struct, 1) = a))

编辑:还有其他方法可以达到同样的效果。看看buildq.