小编Has*_*ewb的帖子

Haskell - 树的fmap和foldMap

我是新的哈斯克尔,我有点卡住了我

data Tree a = Empty | Leaf a | Branch a (Tree a) (Tree a)
    deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我想创建一个fmap和一个foldMap,所以我试过了

instance Functor Tree where
    fmap f (Leaf x) = Leaf (f x)
    fmap f (Branch a left right) = Branch a (fmap f left) (fmap f right)
Run Code Online (Sandbox Code Playgroud)

它根本不起作用,我不明白为什么,我很确定问题就在这里

.. = Branch a (fmap f left) (fmap f right)
Run Code Online (Sandbox Code Playgroud)

无论如何,我真的可以使用fmap和foldMap的一些帮助,实际上我有一个想法,但我没有正确的语法.

谢谢您的帮助.

haskell

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

使用位域将自定义的n位数据写入新的二进制文件中

我已经阅读了多个有关位字段的类似主题,但是我对它的理解不够,因此我无法使用它。这是我的问题。我有这个struct R:

struct R{
   unsigned int opcode: 6;
   unsigned int rs: 5;
   unsigned int rt: 5;
   unsigned int rd: 5;
   unsigned int shamt: 5;
   unsigned int funct: 6;
};
Run Code Online (Sandbox Code Playgroud)

我使用位字段来定义我的结构是32位数据。对于那些想知道的人,此结构表示R类型的MIPS指令。

我想要的是将数据写入一个名为的文件中result,为此我使用了以下代码:

struct R test  = {32,0,11,21,19,0}

FILE *fp = fopen("./result", "rb");
fwrite(&test,sizeof(test),1,result);
Run Code Online (Sandbox Code Playgroud)

使用此代码,如果我运行到控制台xxd -b result,则希望看到以下内容:

00000000: 00100000 01011000 01110101 00000010
Run Code Online (Sandbox Code Playgroud)

相反,我得到

00000000: 00100000 10100000 01110011 00000001
Run Code Online (Sandbox Code Playgroud)

我想问题是fwrite,但我不太了解。

这是一项作业,所以我考虑了一个替代方案:

  1. 创建一个char sequence[32]非常索引模拟1位的数组。
  2. 具有数组的结构:
struct R{
    char opcode[6];
    char rs[5];
    char …
Run Code Online (Sandbox Code Playgroud)

c struct bit-fields

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

标签 统计

bit-fields ×1

c ×1

haskell ×1

struct ×1