lambda 相关问题

编程语言中的匿名函数或闭包,如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java。 (另外,lambda表达式。)

DataFrame 返回数据帧的切片,其中列值等于基于数据帧列的某个值,否则为 0 [重复]

我有一个如下所示的数据框 df = pd.DataFrame({'testid':(1,2,1,2,1,2),'名称':('苹果','苹果','甜瓜','甜瓜','橙子', '橙色'), 'A': (1,2,10,20,5,5), 'B': (1,5,4,2,3,1)}) 睾丸 姓名 一个 乙 1 ap...

回答 1 投票 0

如何创建过滤向量的迭代器?

假设我有一个名为 SpotDeal 的 Spot_deals 向量,它是一个类: 现货交易类 { 民众: int deal_id_; // 主键,向量按id排序 字符串ccy_pair_; // ccy 对,例如格...

回答 5 投票 0

JVM Clojure 如何在后台存储捕获的闭包环境?

当我定义一个在外部作用域中捕获其某些变量的函数时,如下所示,Clojure(在 JVM 主机上)实际上如何存储捕获的环境? (让[小数据结构(

回答 1 投票 0

如何将 std::function 放入像 std::unique_ptr 这样的智能指针中并使用它?

如何将 std::function 放入像 std::unique_ptr 这样的智能指针中并使用它?我已经尝试过了,但没有成功。 这是我已经尝试过的代码: const inline void PrintSection(TurboINI:...

回答 2 投票 0

在支持 lambda 的同时约束 ClassType 的 coroutine_traits

我目前正在编写一个与 co_await 一起使用的协程/promise 库,当有不相关的 lambda 返回

回答 1 投票 0

解析和翻译 Java 8 lambda 表达式

在 C# 中,您可以将 lambda 表达式包含在表达式树对象中,然后可能对其进行解析。我想知道这在Java中是否也可行? 我正在寻找的是做类似的事情...

回答 4 投票 0

lambda 表达式如何在实例化之前引用自身?

为了好玩,我尝试用 lambda 函数创建一个链表。我尝试了这个小代码作为第一步,但是在面临无限循环后我的实验很快就结束了: 导入迭代工具 堆栈=...

回答 1 投票 0

使用foldr在haskell中实现插入

如何在haskell中使用foldr实现插入。 我试过: 插入'' :: Ord a => a -> [a] -> [a] 插入'' e xs =foldr (\x -> \y -> if x 如何在haskell中使用foldr实现插入。 我试过: insert'' :: Ord a => a -> [a] -> [a] insert'' e xs = foldr (\x -> \y -> if x<y then x:y else y:x) [e] xs 没有骰子。 我必须在列表中插入元素 e,以便它位于大于或等于它的第一个元素之前。 示例: insert'' 2.5 [1,2,3] => [1.0,2.0,2.5,3.0] insert'' 2.5 [3,2,1] => [2.5,3.0,2.0,1.0] insert'' 2 [1,2,1] => [1,2,2,1] 在上一个示例中,第一个 2 被插入一个。 编辑: 谢谢@Lee。 我现在有这个: insert'' :: Ord a => a -> [a] -> [a] insert'' e xs = insert2 e (reverse xs) insert2 e = reverse . snd . foldr (\i (done, l) -> if (done == False) && (vj e i) then (True, e:i:l) else (done, i:l)) (False, []) where vj e i = e<=i 但是这不起作用: insert'' 2 [1,3,2,3,3] => [1,3,2,2,3,3] insert'' 2 [1,3,3,4] => [1,3,2,3,4] insert'' 2 [4,3,2,1] => [4,2,3,2,1] 解决方案: insert'' :: Ord a => a -> [a] -> [a] insert'' x xs = foldr pom poc xs False where pom y f je | je || x > y = y : f je | otherwise = x : y : f True poc True = [] poc _ = [x] 谢谢@Pedro Rodrigues(只需将 x>=y 更改为 x>y。) (如何将此标记为已回答?) 你需要 paramorphism 为此: para :: (a -> [a] -> r -> r) -> r -> [a] -> r foldr :: (a -> r -> r) -> r -> [a] -> r para c n (x : xs) = c x xs (para c n xs) foldr c n (x : xs) = c x (foldr c n xs) para _ n [] = n foldr _ n [] = n 有了它, insert v xs = para (\x xs r -> if v <= x then (v:x:xs) else (x:r)) [v] xs 我们可以用 foldr 来模仿 init . tails 的同态,如下所示:需要根据元素升序的中断将列表划分为列表(Haskell)。 因此解决方案是 import Data.List (tails) insert v xs = foldr g [v] (init $ tails xs) where g xs@(x:_) r | v <= x = v : xs | otherwise = x : r 对同态进行编码的另一种方法是通过一系列函数,如 Pedro Rodrigues 的答案中所示,安排 从左到右信息流,同时传递输入列表本身的第二个副本:一个参数(复制 tails 的效果): insert v xs = foldr g (\ _ -> [v]) xs xs where g x r xs | v > x = x : r (tail xs) -- xs =@= (x:_) | otherwise = v : xs -- visual aid to how this works, for a list [a,b,c,d]: -- g a (g b (g c (g d (\ _ -> [v])))) [a,b,c,d] 与他的答案中的版本不同,这不会复制插入点之后的列表结构的其余部分(这是可能的,因为同态性“鱼与熊掌兼得”)。 这是我的看法: insert :: Ord a => a -> [a] -> [a] insert x xs = foldr aux initial xs False where aux y f done | done || x > y = y : f done | otherwise = x : y : f True initial True = [] initial _ = [x] 但是恕我直言,使用 foldr 并不是解决这个问题的最佳选择,对我来说以下解决方案更容易理解: insert :: Int -> [Int] -> [Int] insert x [] = [x] insert x z@(y : ys) | x <= y = x : z | otherwise = y : insert x ys 我想折叠在这里不太方便。它总是处理列表中的all元素,但是您需要在找到第一个出现的元素后停止。 当然这是可能的,但你可能不想使用这个: insert' l a = snd $ foldl (\(done, l') b -> if done then (True, l'++[b]) else if a<b then (False, l'++[b]) else (True, l'++[a,b])) (False, []) l 这是另一个使用 foldr 的解决方案。与这里的其他人相比,它简单易懂。 insert :: Ord a => a -> [a] -> [a] insert a = foldr swap [a] where swap y x_xs@(x:xs) | y > x = x:y:xs | otherwise = y:x_xs 但是,它有一个严重的限制:与使用正常递归解决方案的标准Data.List.insert不同,并且与 Pedro 和 Will Ness 的答案不同,这个版本在给定无限列表时会崩溃。 ghci> take 10 $ insert 4 [1,3..19] -- This works fine. [1,3,4,5,7,9,11,13,15,17] ghci> take 10 $ insert 4 [1,3..] -- This crashes. *** Exception: stack overflow ghci> import qualified Data.List as L (insert) ghci> take 10 $ L.insert 4 [1,3..] [1,3,4,5,7,9,11,13,15,17]

回答 4 投票 0

C++ 返回 lambda 的返回值

请帮忙,因为在你失去理智之前,搜索“返回 lambda 返回值”的方法只有这么多! int 一些函数(){ 返回[](int a){ 返回a; }; } 我想回来...

回答 1 投票 0

Lambda 和方法引用对非最终变量使用不同的方法。为什么?

这个我不懂。 在 lambda 表达式中,您根本无法引用非最终变量。 // 无法编译 @测试 无效方法ReferenceTest() { 字符串消息=“123”...

回答 1 投票 0

从具有按值捕获的 lambda 移动构造 std::function 时,移动构造函数被调用两次

当从 lambda 移动构造 std::function 对象时,该 lambda 具有按值捕获,似乎被值捕获的对象的移动构造函数被调用两次。缺点...

回答 2 投票 0

如果未找到匹配项,FirstOrDefault 将返回 NullReferenceException

这是我的代码: string displayName = Dictionary.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID)).Value.DisplayName; 如果 x.Value.ID 与 options.ID 匹配,则代码可以正常工作。不过,我...

回答 8 投票 0

如何实现一个函数来调用任何模板化 lambda 函数?

我有一个 value_t 将值包装为类型: 模板 struct value_t { static constexpr auto value = _v; }; 我可以使用 take_off 来提取类型和值: 模板 我有一个 value_t 将值包装为类型: template <auto _v> struct value_t { static constexpr auto value = _v; }; 我可以使用 take_off 来提取类型和值: template <typename T> struct take_off { using result = T; }; template <auto _v> struct take_off<value_t<_v>> { static constexpr auto result = _v; }; 现在我想通过调用 invoke(c++20 或 23)来调用具有任何模板参数和函数参数的任何 lambda 函数: auto test_fn = []<typename T, typename T2, T... Vs>(int a, int b){ (..., (std::cout << (T2)Vs << std::endl)); std::cout << a << b << std::endl; }; // template <typename...> // auto invoke(test_fn, ...) invoke<int, double, value_t<1>, value_t<2>, value_t<5>>(test_fn, 1, 2); 我的invoke实现是: template <typename... Ts> decltype(auto) invoke(auto _fn, auto... _args) { using ret_type = decltype(_fn.template operator()<take_off<Ts>::result...>(_args...)); if constexpr (std::is_void_v<ret_type>) { _fn.template operator()<take_off<Ts>::result...>(_args...); return; } else { return _fn.template operator()<take_off<Ts>::result...>(_args...); } } 它在 MSVC 上运行良好。 但是用clang编译的时候却出现了错误: error: missing 'typename' prior to dependent type name `take_off<Ts>::result` 如果我使用 invoke 代替,auto 将不再适用于 typename take_off<Ts>::result 模板参数。 那么有没有办法实现这个invoke? 您期望前 2 个 typename take_off<Ts>::result。 您可以将代码重写为 template <typename T1, typename T2, typename... Ts> decltype(auto) invoke(auto _fn, auto... _args) { return _fn.template operator()< typename take_off<T1>::result, typename take_off<T2>::result, take_off<Ts>::result...>(_args...); } 演示

回答 1 投票 0

GCC 是否有错误:默认 std::function?

如何指定默认函数作为类成员的参数? 从我的代码派生的当前示例是: #包括 #包括 模板 ...

回答 1 投票 0

Java 中的“SAM 类型”是什么?

阅读 Java-8 规范时,我不断看到对“SAM 类型”的引用。我无法找到这是什么的明确解释。 什么是 SAM 类型以及什么情况下的示例场景...

回答 1 投票 0

如何将 C++ Google Test ::testing::ValuesIn 与 std::generator lambda 一起使用?

INSTANTIATE_TEST_SUITE_P( 我的测试, 我的测试夹具, ::测试::组合( ::测试::值(make_tuple(2, 8, 矢量{1, 2, 3, 4, 5, 6, 5}),

回答 1 投票 0

如何防止错误地以错误的顺序传递参数

代码库采用Java。我需要有条件地从两个不同的存储中读取数据。 接口阅读器 { T 读(); } T foo(Reader reader1, Reader reader2) { // 读你...

回答 1 投票 0

带有 lambda 表达式的 PROLOG

有没有支持lambda表达式的Java PROLOG实现?我知道还有其他语言的 Java 实现支持 lambda 表达式,例如 LISP 和 Clojure,但是...

回答 4 投票 0

AWS Cognito 自定义身份验证流程为无密码登录返回“错误的用户名或密码”

我正在使用 AWS Cognito 为我的应用程序实现自定义无密码身份验证流程。这个想法是允许用户使用电话号码和使用 Meta 的 A 通过 WhatsApp 发送的 OTP 进行登录...

回答 1 投票 0

减少 python AWS Lambda 函数中的冷启动

我有一个用Python编写的AWS lambda函数,它需要一种操作表中存储的数据的方法。 我的解决方案是使用 pandas 将表作为 parquet 文件读取。 虽然这有效,但...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.