小编Inf*_*ity的帖子

如何在Haskell中将整数列表转换为真假矩阵

在本练习中,我应该编写一个函数,它接收一个整数列表作为参数,并给出一个矩阵或列表列表.制作矩阵的要点是整数表示矩阵True中的s 数.例如

[2,4,1]
Run Code Online (Sandbox Code Playgroud)

必须翻译成:

在此输入图像描述

系统中的哪个表示为列表列表:

[ [0,1,0], [0,1,0], [1,1,0], [1,1,1] ]
Run Code Online (Sandbox Code Playgroud)

由于按列操作矩阵(列表列表)并不容易,我使用了一个技巧并将矩阵向左旋转90度,transpose这使得矩阵如下所示:

在此输入图像描述

然后我开发了以下算法来解决问题:

  1. 获取输入列表的第一个元素
  2. 创建一个长度列表maximum xs(每个列表的长度等于列表中的最大元素)
  3. True在第一个元素确定的列表中放入这么多.
  4. 填写列表的其余部分 False
  5. 对所有元素执行相同操作并旋转矩阵

我试图实现两个解决方案,但每个解决方案都有一个我无法解决的问题:

  1. 这个适用于第一个元素就好了,但我不知道如何将它应用于输入列表的所有元素

    listToMatrix x = (replicate ((maximum x) - (head x)) False) ++ (replicate (head x) True)`
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这适用于所有元素,但不能保持内部列表的长度,因此列表具有不同的长度.

    listToMatrix lst@(x:xs) = ((replicate ((maximum lst) - x) False) ++ (replicate x True)) : listToMatrix xs`
    
    Run Code Online (Sandbox Code Playgroud)

问题1:如何使这些功能在最小的变化下工作?

问题2:更优雅和紧凑的解决方案?

PS我在矩阵中使用了1和0来使它们更具可读性,但实际上它们是真的和假的

haskell

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

MIPS 汇编乘法并将 Hi 和 Lo 移入寄存器

mult指令可以将两个 32 位整数相乘,从而得到 64 位结果。结果的高 32 位 (32 - 63) 保存在 Hi 中,低位 (0 - 31) 保存在 Lo 中。在乘法之后,我可以使用mfhi并将mflo结果移动到寄存器。但是显然不可能把64位的数写到32位的寄存器中。如何将结果存储回寄存器并使用它?我应该将每个部分保存在单独的寄存器中并将它们连接起来吗?

assembly mips

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

标签 统计

assembly ×1

haskell ×1

mips ×1