小编and*_*oke的帖子

如何从地图填充Clojure记录?

是否有类似记录的struct-map?如果没有,我应该使用结构(文档不鼓励使用结构)?

也许我完全做错了什么?我有一个相当复杂的功能,目前需要一个选项图.我试图澄清哪些选项值是可接受/使用的(通过用记录替换它).现在我想将它连接到在地图中包含此信息的代码(并且其中包含记录中数据的超集).

record clojure data-structures

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

使用Python和libgpod(gtkpod)从Linux加载音乐到iPod

以下代码,我认为是加载音乐的最小程序

db = Database('/media/andrew@acooke.org ipod')
itdb_device_set_sysinfo(db._itdb.device, "ModelNumStr", "C297")
db.import_file('/home/andrew/some-track.mp3')
db.copy_delayed_files()
db.close()
Run Code Online (Sandbox Code Playgroud)

将以下内容打印到stderr:

** (utrunner.py:11333): WARNING **: Itdb_Track ID '0' not found.
** (utrunner.py:11333): CRITICAL **: itdb_get_mountpoint: assertion `itdb' failed
** (utrunner.py:11333): CRITICAL **: prepare_itdb_for_write: assertion `link' failed
** (utrunner.py:11333): CRITICAL **: mk_mhla: assertion `fexp->albums' failed
** (utrunner.py:11333): CRITICAL **: mk_mhli: assertion `fexp->artists' failed
** (utrunner.py:11333): CRITICAL **: itdb_splr_validate: assertion `at != ITDB_SPLAT_UNKNOWN' failed
Run Code Online (Sandbox Code Playgroud)

并且不加载任何音乐.

当我运行gtkpod(它使用libgpod - 它们都来自同一个项目)时,它确实有效(并且只打印初始警告和ITDB_SPLAT_UNKNOWN消息).路径都是正确的,我可以打开目录,写入文件等.数据库对象看起来是正确的(例如显示2个播放列表),并且存在SysInfoExtended文件.

我究竟做错了什么?有没有人有这个(libgpod Python包装)工作?

一个可能的线索是gtkpod提示我输入iPod类型(Classic 160GB).我没有在上面设置这些信息.我怎么设置? 更新 - 我确实尝试了上面显示的调用,并在下面的答案中提到,但它似乎没有效果(我最初没有包括它,因为我认为它一定是错的,但也许它是需要的,问题在其他地方).另外,gtkpod称之为"xB150"?!

我已经问过libgpod/gtkpod邮件列表,但没有得到回复.这是最新的稳定版本和git trunk(使用CFLAGS …

python linux ipod

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

C中的逻辑相等

[看起来很奇怪,这不存在,所以如果它是重复的话,请提前道歉]

我想在C中测试逻辑相等性.换句话说,我想知道如果两个值都以与逻辑表达式相关联的正常方式转换,两个值是否相等.

在C99,我认为

(bool)a == (bool)b
Run Code Online (Sandbox Code Playgroud)

给出我想要的东西.那是对的吗?在传统的C中写这个的正常方法是什么?

c boolean equality

8
推荐指数
2
解决办法
1456
查看次数

从标头自动生成C代码

我想生成头文件中定义的空过程.理想情况下,它们应该为指针返回NULL,为整数等返回0,并且在理想的世界中,还要向stderr打印调用哪个函数.

这样做的动机是需要实现一个包装器,它将复杂的现有API(头文件)的子集调整到另一个库.只需要委托API中的少量程序,但不清楚哪些程序.所以我希望使用一种迭代方法,在这种情况下,我针对这个自动生成的包装器运行,看看有什么叫做,用委托来实现,然后重复.

我看到从头部自动生成C++文件?但答案似乎是C++特定的.

因此,对于那些需要用简单术语拼写的问题的人来说,如何在给定头文件的情况下自动生成这样的实现?我更喜欢现有的工具 - 我目前对一个简单解决方案的最佳猜测是使用pycparser.

更新谢谢你们.两个好的答案.还发布了我目前的黑客.

c code-generation

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

如何在Clojure中更好地迭代状态(monad?)

我刚写了这段代码:

(defn parameters [transform-factory state]
  (lazy-seq (let [[r1 state] (uniform state)
                  [r2 state] (uniform state)
                  [t state] (transform-factory state)]
              (cons [t [r1 r2]] (parameters transform-factory state)))))

(defn repeated-transform [mosaic n transform-factory state]
  (reduce transform-square mosaic
    (take n (parameters transform-factory state))))
Run Code Online (Sandbox Code Playgroud)

parameters函数生成一个state由其生成的惰性值序列,用于参数化某事物的重复变换(在本例中为"马赛克").

在我看来,它parameters显示了一个相当常见的模式,当你有一些state必须随身携带时(在这种情况下生成随机值).有这个名字吗?

是否有更好的方法来编写第一个函数?相关的问题通常可以通过reduce"携带"状态来解决,但在这里我没有什么可以减少的.同样,reductions似乎不合适.这对monad来说是个好例子吗?(从理论上看,我没有看到你如何定义一种方法将多个实例合并为一个,但也许这并没有改变实际的应用程序 - 它看起来像monad解决其他地方的问题,一些国家需要随身携带).

(ps我提到了随机数字,但我无法用在幕后使用可变状态的解决方案替换它 - 正如"正常"随机例程那样 - 出于与问题无关的原因).

monads state functional-programming clojure

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

Clojure相当于Python doctest?

Python文档测试将简单测试与源代码相关联(在Python中,它们在函数文档中). 更多信息和示例在这里.

Clojure有类似的东西吗?

我知道单元测试clojure.test,但寻找与源更紧密集成的东西(通常单元测试在不同的文件中;这里我想让测试"在里面" defn).

在我周围搜索我发现了这个,但它看起来非常不l(测试是在实际文本中,就像Python一样 - 当然,扩展的宏defn会更好吗?).

或者也许有其他方法可以解决一般问题,即我有一些测试(通常是简单的事情,演示函数的基本属性),这些测试将更好地包含在文档中(我使用的是边缘)而不是单独的单元测试文件.

更新 这是一个例子:我有一个函数来计算从像素矩形到图像中心的(曼哈顿)距离(以像素为单位).这听起来很简单,但是由于边缘上有奇数或偶数像素的图像的"中心"含义不同,或者你测量的块的哪个部分,这种情况很复杂.所以我不得不写一些测试来直接获得代码.现在我看看文档,如果文档包含那些测试,那将是最好的,因为它们比函数更好地解释函数的功能......

unit-testing clojure marginalia

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

如何删除/替换pygame中的文本

我是pygame的新手,我打了我的第一个树桩,我找不到答案..

blitting文本后,然后更改同一个变量的字符串,游戏而不是用新的替换原始文本,重叠两个文本..?

text pygame blit

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

为(非系统)Python 安装 rpm 模块

我需要支持一些使用旧 Python 版本 (2.4) 的软件。所以我下载并编译了 Python 2.4 并将其安装在 virtualenv 中。到目前为止,一切正常,程序正常。

但是该软件正在尝试导入rpm模块。而且我找不到该模块的源代码(它不是标准 Python 库的一部分,afaict)。

通常,一旦启用了 virtualenv ( source env/bin/activate),我就可以使用easy_install. 但是easy_install rpm什么也找不到。有一个pyrpm模块,但它不是一回事(它安装了一个名为“pyrpm”的模块)。谷歌搜索也没用,因为它们都链接到关于如何构建 rpms 的文章......

如果我使用系统 python(在 Ubuntu 上),我可以安装这个python-rpm包。但这适用于 Python 2.7。如何安装 Python 2.4 的等价物?

[我的印象是,很多Linux系统使用的rpm库都包含一个Python库,发行版将其打包为python-dev。但我看不到如何访问任意 python 版本。]

我不是在寻找包含 Python 2.4 的 RPM。我正在寻找一个名为 rpm 的模块,该模块由为 PYTHON 2.4 编写的软件使用。

python rpm

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

如何在Clojure中对来自某些结构的多个向量求和

简单版本:

这有效:

user=> (map + [1 2 3] [4 5 6] [7 8 9])
(12 15 18)
Run Code Online (Sandbox Code Playgroud)

这不是:

user=> (for [n (range 3)] [n (+ 1 n)])
([0 1] [1 2] [2 3])
user=> (map + (for [n (range 3)] [n (+ 1 n)]))
java.lang.ClassCastException
Run Code Online (Sandbox Code Playgroud)

为什么?


我对clojure很新,所以这可能是一个新手的错误.在下面的代码中,我试图将多个信号一起添加.每个信号都包含一个矢量(称为数据),我想分段添加.在REPL,这样的事情:

user=> (map + [1 2 3] [4 5 6] [7 8 9])
(12 15 18)
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像:

(defrecord signal [x y data])
(defrecord sampling [t0 dt n])

(defn random-signal [x y sampling tstart tend] …
Run Code Online (Sandbox Code Playgroud)

clojure

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

在Python 3.1中使用Duck键入排序的最小方法

手册中说:

在一般情况下,__lt__()__eq__()有足够的,如果你想比较运营商的传统含义

但我看到了错误:

>       assert 2 < three
E       TypeError: unorderable types: int() < IntVar()
Run Code Online (Sandbox Code Playgroud)

当我运行此测试时:

from unittest import TestCase

class IntVar(object):

    def __init__(self, value=None):
        if value is not None: value = int(value)
        self.value = value

    def __int__(self):
        return self.value

    def __lt__(self, other):
        return self.value < other

    def __eq__(self, other):
        return self.value == other

    def __hash__(self):
        return hash(self.value)

class DynamicTest(TestCase):

    def test_lt(self):
        three = IntVar(3)
        assert three < 4
        assert 2 < three
        assert …
Run Code Online (Sandbox Code Playgroud)

python duck-typing python-3.x

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