小编omr*_*210的帖子

实现用于访问1D向量的2D向量语法?

我正在制作玩具roguelike,并且有一个Level用于存储游戏地图的结构,其中最天真的实现是2D矢量.

我下面这个教程它采用VectorVectorS,但指出,对于性能提升它也可以使用一个单一的Vector大小MAP_HEIGHT * MAP_WIDTH,并在访问瓷砖(x, y)可以简单地访问map[y * MAP_WIDTH + x].

我正在尝试实现这种更快的方法,但使用getter和setter是笨重的,公共字段也不是那么好.我更喜欢它感觉像2D矢量.

为了做到这一点,我需要Index为我的班级实现特质,但我不确定如何得到我想要的结果.也许通过嵌套impls?我真的不知道.

这是我的代码尝试实现Index我的结构,这显然不适用于我的目的,因为它是一维的:

const MAP_WIDTH: i32 = 80;
const MAP_HEIGHT: i32 = 45;

pub struct Level {
    map: Vec<Tile>,
}

impl Level {
    pub fn new() -> Self {
        Level { map: vec![Tile::empty(); (MAP_HEIGHT * MAP_WIDTH) as usize] }
    }
}

impl std::ops::Index<i32> for Level {
    type Output = …
Run Code Online (Sandbox Code Playgroud)

syntax vector operator-overloading rust

4
推荐指数
2
解决办法
382
查看次数

GHC如何知道如何缓存一个函数而不是其他函数?

我读你学习哈斯克尔(到目前为止爱它),并教导如何实现elem来讲foldl,使用Lambda.lambda解决方案对我来说似乎有点难看所以我试着考虑其他实现(全部使用foldl):

import qualified Data.Set as Set
import qualified Data.List as List

-- LYAH implementation
elem1 :: (Eq a) => a -> [a] -> Bool
y `elem1` ys = 
    foldl (\acc x -> if x == y then True else acc) False ys

-- When I thought about stripping duplicates from a list
-- the first thing that came to my mind was the mathematical set
elem2 :: (Eq a) => a -> [a] -> …
Run Code Online (Sandbox Code Playgroud)

benchmarking haskell memoization

3
推荐指数
2
解决办法
93
查看次数

在Common Lisp中输入变量

我读到CL支持可选的输入(因为在语言中有这个功能)在很多情况下我会假设allos用于更快的代码,但我似乎找不到任何关于实际编写类型代码的东西.是否可以显式键入代码而不是使用黑客?(例如,#'vector生成一个simple-vector,有点让我想起|0JS强制转换为整数)

或者也许因为类型实际上是CLOS类(它们是,对吧?)你只需要#'make-instance一个类型的对象,比方说,'integer

types typing common-lisp typed

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