函数参数在 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
.
我尝试在 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
.