有没有办法在Racket中制作简单的阅读器宏.我的意思是像这样的概括:
(define-reader-syntax "'" quote)
; finds expressions that start with "'" and wraps them in `(quote ...)`
'(foo) ; => (quote (foo))
'foo ; => (quote foo)
Run Code Online (Sandbox Code Playgroud)
我使用内置语法来明确我的意思.我想用它做的一件事就是复制clojure的速记lambda(#(+ 1 %) 5) ; => 6
看起来很容易定义一个"shorthand-lambda"宏并将"#"前缀映射到它.
我想使用球拍制作一个游戏,其图形将涉及一个网格,其中每个单元格可以在彼此之上填充一个或多个精灵.Racket在其标准库中有一个图形和gui工具包,非常好用.但除了正式的文档之外,我在实践中找不到任何关于使用库的内容,更重要的是,我无法在GUI中渲染绘图库的输出,因此它实际上可以与之交互.
是否有任何好的资源(书籍博客文章,截屏视频)或至少一个体面的开源项目,我可以看看,以了解它?
我想使用haskell来实现一个游戏,并希望使用类型系统来实现项目系统.它会像这样工作:
data Wood = Wood Int
instance Item Wood where
image a = "wood.png"
displayName a = "Wood"
instance Flammable Wood where
burn (Wood health) | health' <= 0 = Ash
| otherwise = Wood health'
where health' = health - 100
Run Code Online (Sandbox Code Playgroud)
Item和Flammable类是这样的:
class Item a where
image :: a -> String
displayName :: a -> String
class Flammable a where
burn :: (Item b) => a -> b
Run Code Online (Sandbox Code Playgroud)
为此,我需要一种方法来检测值是否是类型类的实例.
Data.Data模块提供了类似的功能,这使我相信这是可能的.
文本编辑器如何执行语法突出显示?我知道vim使用带有特殊扩展的简单正则表达式来使它们更加强大,以区分语法元素,但我也知道像TextMate这样的其他文本编辑器允许您定义完整的解析器.不知道TextMate在大文件上表现良好,但Sublime Text据说在大文件上比vim表现更好,但支持传统的TextMate语法解析器.是否有一些有趣的黑客用来避免执行文件的从上到下的解析,或者只是采用了非常有效的解析算法?
我只是学习c ++,来自对C和Java的理解.我不太明白为什么我写的一些代码不会泄漏内存.这是代码:
// Foo.h
class Foo {
private:
std::vector<int> v;
public:
Foo();
virtual ~Foo();
void add_int(int);
}
// Foo.cpp
Foo::Foo(): v () {}
Foo::~Foo() {}
Foo::add_int(int x) {
v.append(x);
}
Run Code Online (Sandbox Code Playgroud)
存储在v内部的向量显然在内部存储了一个指向堆分配内存的指针,需要释放它,但我永远不会释放它.然而,Valgrind表示使用此代码根本不泄漏.我觉得理解为什么会有助于提高我对语言的理解.