我收到以下错误,如果我尝试执行我的x_length
函数,则应该测量给定列表的长度:
异常:test.hs:2:1-36:函数x_length中的非穷举模式
我使用将test.hs
文件加载到ghci中Prelude>:l test.hs
。
该x_length
函数的实现是(在test.hs
文件中):
x_length :: [Int] -> Int
x_length (x:xs) = 1 + x_length xs
Run Code Online (Sandbox Code Playgroud)
我已经知道,它必须与加载test.hs
文件有关,但是我还没有弄清楚如何解决此问题。
我使用进行的实际函数调用x_length [1,2,3,4]
。
我努力foobar123
在一个单词和一个未知长度的数字之间用下划线分隔给定的字符串(结果:)foobar_123
。我尝试使用正则表达式来查找匹配项 r1(有效)。但在此之后,我不知道如何分离相应的匹配。
import re
x = "foobar123"
y = re.sub("[a-z]{1}\d{1}", "\1", x)
print(y) # Output: "fooba23"
Run Code Online (Sandbox Code Playgroud)
我认为应该使用 "\1" 来访问上一个匹配项。所以我试图用它自己替换找到的匹配,但这导致:fooba23。不应该是 foobar123。
提前致谢。
更新:
很抱歉上面代码中的错字,它应该[a-z]
不是[0-9]
.
我使用Microchip ATECC508A安全芯片的sha256功能。我的代码如下所示:
int main(void) {
uint8_t message[32] = {0}; // Method 1
//uint8_t message[32] = "00000000000000000000000000000000"; // Method 2
foobar(message, sizeof(message));
}
void foobar(uint8_t *message, int length) {
uint8_t digest[32];
sha256(message, length, digest);
// printf statements for calculated hashes ...
}
Run Code Online (Sandbox Code Playgroud)
方法1:66687AADF862BD776C8FC18B8E9F8E20089714856EE233B3902A591D0D5F2925
方法2:84E0C0EAFAA95A34C293F278AC52E45CE537BAB5E752A00E6959A13AE103B65A
方法2推导了我期望的32个零的对应哈希,但是当我在方法1中使用静态数组初始化程序时,哈希是错误的,我也不知道为什么。我在这里检查了生成的sha256哈希值。
我将不胜感激,非常感谢。
编辑:
我能够使用零字符来初始化整个数组:
uint8_t message[32] = { [0 ... 31] = '0'}
。
这仅适用于gcc编译器。
我已经读过Rust的指针算术可以通过该pointer.offset()
函数完成,但始终必须在中实现unsafe code
:
fn main() {
let buf: [u32; 5] = [1, 2, 3, 4, 5];
let mut ptr1: *const u32 = buf.as_ptr();
unsafe {
let ptr2: *const u32 = buf.as_ptr().offset(buf.len() as isize);
while ptr1 < ptr2 {
println!("Address {:?} | Value {}", ptr1, *ptr1);
ptr1 = ptr1.offset(1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想安全地在Rust中编码,是否应该不使用指针算术而仅使用数组的相应索引进行编码?还是还有其他方法?
我想将列表向左移动n个元素。为什么我得到一个错误,如果我想的顺序更改(x:xs)
到(xs:x)
?
shift n list@(x:xs)
| n == 0 = list
| otherwise = shift (n-1) (xs:x) -- (xs:x) error
Run Code Online (Sandbox Code Playgroud)
进行检查:无法构造无限类型:a〜[a]
我不知道如何解释这个错误。也许有人可以帮助我。非常感谢你。
编辑:正如已经提到的,要使用的正确术语是旋转而不是平移