我是新的哈斯克尔,我有点卡住了我
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的一些帮助,实际上我有一个想法,但我没有正确的语法.
谢谢您的帮助.
我已经阅读了多个有关位字段的类似主题,但是我对它的理解不够,因此我无法使用它。这是我的问题。我有这个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,但我不太了解。
这是一项作业,所以我考虑了一个替代方案:
char sequence[32]非常索引模拟1位的数组。struct R{
char opcode[6];
char rs[5];
char …Run Code Online (Sandbox Code Playgroud)