小编Tab*_*koj的帖子

递归列表时出现非穷举模式错误

我收到以下错误,如果我尝试执行我的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]

recursion haskell

2
推荐指数
1
解决办法
82
查看次数

使用正则表达式分隔单词和数字

我努力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].

python regex

2
推荐指数
1
解决办法
135
查看次数

SHA256摘要在数组初始化程序和字符串之间有所不同

我使用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编译器。

c hash sha256

1
推荐指数
1
解决办法
43
查看次数

如果我想安全地在Rust中编码,是否应该在不使用指针算术的情况下进行编码?

我已经读过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中编码,是否应该不使用指针算术而仅使用数组的相应索引进行编码?还是还有其他方法?

pointers pointer-arithmetic rust

0
推荐指数
2
解决办法
154
查看次数

Haskell班次列表

我想将列表向左移动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]

我不知道如何解释这个错误。也许有人可以帮助我。非常感谢你。

编辑:正如已经提到的,要使用的正确术语是旋转而不是平移

recursion haskell

0
推荐指数
1
解决办法
165
查看次数

标签 统计

haskell ×2

recursion ×2

c ×1

hash ×1

pointer-arithmetic ×1

pointers ×1

python ×1

regex ×1

rust ×1

sha256 ×1