foldMap 有以下类型:
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
Run Code Online (Sandbox Code Playgroud)
如果你部分申请idfoldMap,你会得到
foldMap id :: (Foldable t, Monoid m) => t m -> m
Run Code Online (Sandbox Code Playgroud)
为什么会t a改变一个t m应用的时候id?
我有一个叫做的函数add_vec.它需要两个向量并通过对压缩向量中的元素对执行元素加法来创建一个新向量.
extern crate num;
use num::traits::Num;
fn add_vec<N: Num>(v1s: Vec<N>, v2s: Vec<N>) -> Vec<N> {
let mut v3s = Vec::new();
for (v1, v2) in v1s.iter().zip(v2s.iter()) {
v3s.push(v1 + v2)
}
v3s
}
#[cfg(test)]
mod tests {
use super::add_vec;
#[test]
fn it_works() {
let v1s = vec![1, 0, 3];
let v2s = vec![0, 1, 1];
let v3s = add_vec(v1s, v2s);
assert_eq!(v3s, vec![1, 1, 4]);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我最终得到以下错误消息:
error[E0369]: binary operation `+` cannot be applied to type `&N`
--> src/lib.rs:14:18 …Run Code Online (Sandbox Code Playgroud) 我有一个项目布局,如下所示:
src/
int_rle.rs
lib.rs
tests/
test_int_rle.rs
Run Code Online (Sandbox Code Playgroud)
该项目编译cargo build,但我无法运行测试cargo test.我收到了错误
error[E0432]: unresolved import `int_rle`. There is no `int_rle` in the crate root
--> tests/test_int_rle.rs:1:5
|
1 | use int_rle;
| ^^^^^^^
error[E0433]: failed to resolve. Use of undeclared type or module `int_rle`
--> tests/test_int_rle.rs:7:9
|
7 | int_rle::IntRle { values: vec![1, 2, 3] }
| ^^^^^^^^^^^^^^^ Use of undeclared type or module `int_rle`
error: aborting due to 2 previous errors
error: Could not compile `minimal_example_test_directories`.
Run Code Online (Sandbox Code Playgroud)
我的代码:
// …Run Code Online (Sandbox Code Playgroud) 我有,我想创建一个tar.gz项目python setup.py install.
问题是,我dist/在运行时只获取文件夹中的egg文件python setup.py install.我需要project.tar.gz文件,以便我可以轻松地从conda安装它.
如何python setup.py install创建tar.gz(我真的不需要任何egg文件).
我最终想要的是一个tar.gz存档,显示在pypi上有一个下载链接和md5,我曾经在PYPI更新之前得到它.
reset_index(drop=True)当替代方案要快得多时,我为什么要使用?我确定我遗漏了一些东西。(或者我的时间安排不好......)
import pandas as pd
l = pd.Series(range(int(1e7)))
%timeit l.reset_index(drop=True)
# 35.9 ms +- 1.29 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
%timeit l.index = range(int(1e7))
# 13 us +- 455 ns per loop (mean +- std. dev. of 7 runs, 100000 loops each)
Run Code Online (Sandbox Code Playgroud) 假设我们有一个具有此定义的类型:
data Tree a = Leaf a | Branch [Tree a] deriving (Show,Eq)
Run Code Online (Sandbox Code Playgroud)
我想要做的是一个返回布尔值的函数.
False如果我的二叉树包含Leaf,True如果没有.
这是我的代码:
tester :: Tree a -> Bool
tester (Leaf x) = False
tester (Branch y) = if (Branch (map tester y)) then True else False
Run Code Online (Sandbox Code Playgroud)
我知道这个问题的主要问题是没有办法评估,(Branch (map tester y))但我真的不知道如何解决它.
我可以添加一个新的子句,例如类似的东西tester (Branch y) = True,但我认为这不是一个好主意.
我有以下数据类型和半群实例:
data Or a b =
Fst a
| Snd b deriving (Eq, Show)
instance Semigroup (Or a b) where
(<>) (Fst a) (Fst b) = Fst b
(<>) (Snd a) (Fst b) = Snd a
(<>) (Fst a) (Snd b) = Snd b
(<>) (Snd a) (Snd b) = Snd a
Run Code Online (Sandbox Code Playgroud)
我想为上面的类型创建一个monoid实例,但我不知道如何做到这一点.如果我使用以下定义
instance (Monoid a, Monoid b) => Monoid (Or a b) where
mempty = (Fst mempty)
mappend = (<>)
Run Code Online (Sandbox Code Playgroud)
<>除了I之外,它将适用于所有输入对mappend
(Fst a) <> mempty
Run Code Online (Sandbox Code Playgroud)
将评估为mempty …
http://haskellbook.com中的一个练习是编写一个函子实例
data EvilGoateeConst a b =
GoatyConst b
Run Code Online (Sandbox Code Playgroud)
我的尝试是
instance Functor (EvilGoateeConst a) where
fmap f (GoatyConst b) = GoatyConst b
Run Code Online (Sandbox Code Playgroud)
最简单的解决方法是将参数切换到类型构造函数,但我想这是禁止的.在不改变原始类型的情况下解决此问题的最简单方法是什么?
(而且我没有应用这个函数,因为这会使编译器成为barf,但我认为根据法律它仍然是一个有效的函子.)
我有一本关于统计的书(使用R),显示以下内容:
> pima$diastolic [pima$diastolic = = 0] <- NA
> pima$glucose [pima$glucose == 0] <- NA
> pima$triceps [pima$triceps == 0] <- NA
> pima$insulin [pima$insulin == 0] <- NA
> pima$bmi [pima$bmi == 0] <- NA
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行或更高效地完成?我看到有一些函数,比如with,apply,subset来做类似的东西,但是无法弄清楚如何将它们组合在一起......
示例数据(如何将其作为数据帧读取(如pythons stringio):
pregnant glucose diastolic triceps insulin bmi diabetes age test
1 6 148 72 35 0 33.6 0.627 50 positive
2 1 85 66 29 0 26.6 0.351 31 negative
3 8 183 64 0 0 23.3 0.672 32 positive
4 …Run Code Online (Sandbox Code Playgroud) 我有一个叫做的函数new_vec.它通过对压缩矢量中的元素对执行元素运算,需要两个向量并创建一个新向量.
fn main() {
let v1s = vec![1, 0, 1];
let v2s = vec![0, 1, 1];
let v3s = new_vec(v1s, v2s);
println!("{:?}", v3s) // [1, 1, 2]
}
fn new_vec(v1s: Vec<i32>, v2s: Vec<i32>) -> Vec<i32> {
let mut v3s = Vec::<i32>::new();
for (v1, v2) in v1s.iter().zip(v2s.iter()) {
v3s.push(v1 + v2) // would also like to use -
}
v3s
}
Run Code Online (Sandbox Code Playgroud)
我希望有一个new_vec为共同二进制的操作,可以对两个整数,如使用功能+,-,/,*.
我该怎么做呢?我可以想象两种方式:宏和闭包.如何小例子来做到这一点的最佳方式,例如使用+和-将不胜感激.
我试图在Cython中为Python编写一个运行长度编码算术库.下面你会看到声明和算法热循环的重要部分是如何看的.它有两个地方有很多和中等的Python交互,第73-74行和第77行.为重度Python交互部分生成的C代码最后显示在一张图片中.我只会询问如何在这里解决73-74,因为我认为77的修复程序是相似的.
正如您所看到的,在生成的C代码中有1)很多类型转换,2)它使用richcompare和3)getitemint.我不明白为什么:1)类型应该是相同的,2)比较应该可以在C级别,因为他们只是比较相同类型的数字和3)getitem应该是多余的,因为你只是查找一个C数组中的索引.
如何解决这个问题以优化我的代码?numpy数组声明创建Python对象的问题是否需要以某种方式指向它们?
在这里,您可以看到为我的热循环中的两个黑暗和淡黄色位置生成的C代码Cython:
23.8.2在haskell书中练习要求我构建如下状态:
put' :: s -> State s ()
put' s = undefined
-- should act like:
-- Prelude> runState (put "blah") "woot"
-- ((),"blah")
Run Code Online (Sandbox Code Playgroud)
我得到的唯一一个类型的实现是
import Control.Monad.Trans.State -- Not sure this is the right import
put' :: s -> State s ()
put' s = state $ \s -> ((), s)
Run Code Online (Sandbox Code Playgroud)
但这会在参数中返回状态runState,而不是put':
?> runState (put' "blah") "woot"
((),"woot")
Run Code Online (Sandbox Code Playgroud)
我需要修复什么haskell杂技?看不出我怎么能访问"blah".