(let* ((yin ((lambda (foo) (display "@") foo) (call/cc (lambda (bar) bar)))) (yang ((lambda (foo) (display "*") foo) (call/cc (lambda (bar) bar))))) (yin yang))输出结果是什么
时间: 2023-02-07 11:51:12 浏览: 69
这个表达式会输出什么呢?
这个表达式使用了一些 Scheme 的特性,包括 lambda 函数、call/cc 和 bar。
lambda 函数是一种特殊的函数,它可以在运行时被定义。call/cc 是一种特殊的控制结构,它可以在当前的环境中调用一个函数,并且可以让这个函数控制返回到调用它的地方。bar 是一个变量,它被用来保存一个函数。
在这个表达式中,yin 和 yang 都是 lambda 函数,它们都调用了 call/cc 并传入了一个 lambda 函数。这个 lambda 函数保存了当前的环境,并且可以在以后调用来返回到这个环境。
最后,表达式 (yin yang) 调用了 yin 和 yang 两个函数,并且传入了 yang 函数。因此,这个表达式的输出结果应该是 "@*"。
相关问题
解释一下这行代码 strings=['foo','card','bar','banana'] string.sort(key=lambda:x len(set(list(x))))
这行代码定义了一个字符串列表 strings,然后对这个列表进行排序。排序的关键是一个 lambda 函数,该函数对列表中的每个字符串 x,计算其去重后的字符数 len(set(list(x))),然后将这个数作为排序的关键值。
可以把 lambda 函数拆分开来看:
```
lambda x: len(set(list(x)))
```
这个 lambda 函数接受一个参数 x,将其转换为列表,去重后计算其长度,最终返回这个长度值。
因此,该代码会对 strings 列表进行排序,按照每个字符串去重后的字符数从小到大排序。最终的排序结果为:
```
['card', 'foo', 'bar', 'banana']
```
lambda表达式的this陷阱c++
在C++中,lambda表达式可以用于创建匿名函数对象。与普通函数不同,lambda函数可以捕获其所在作用域中的变量,并在函数体内使用这些变量。然而,当lambda函数被以引用方式传递给其他函数时,可能会发生this陷阱。
this指针在C++类中用于访问当前对象的成员变量和成员函数。当lambda函数被捕获并在类的成员函数中使用时,它会捕获当前对象的this指针。然而,如果lambda函数以引用方式传递给其他函数,并且在其他函数中被调用,lambda函数将继续使用原始的this指针,这可能导致未定义的行为。
为了避免this陷阱,可以使用值捕获或使用std::function来封装lambda函数。通过值捕获,lambda函数会复制当前对象的this指针,而不是引用它。使用std::function可以将lambda函数转换为可调用对象,确保正确地处理this指针。
下面是一个示例代码,展示了this陷阱的问题和解决方法:
```cpp
#include <iostream>
#include <functional>
class MyClass {
public:
void foo() {
auto lambda = [this]() {
std::cout << "This is lambda." << std::endl;
};
// 错误的传递方式(可能导致this陷阱)
// process(lambda);
// 使用值捕获避免this陷阱
process([lambda]() {
lambda();
});
// 使用std::function封装lambda函数
std::function<void()> func = lambda;
process(func);
}
void process(std::function<void()> func) {
func();
}
};
int main() {
MyClass obj;
obj.foo();
return 0;
}
```
在上述示例中,如果我们直接将lambda函数传递给process函数,可能会导致this陷阱。但是,通过使用值捕获或std::function,我们可以避免这个问题,并确保lambda函数在其他函数中正确地使用this指针。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)