小编dom*_*mna的帖子

嵌套列表的常规类型参数

我正在尝试编写一个解析器,它应该将Prolog列表(例如[1,2,3,4])解析到相应的Scala列表中.我使用Scalas解析组合器对解析器进行编程.

到目前为止,我的解析器看起来像这样:

class PListParser extends JavaTokenParsers{
    def list:Parser[List[Any]] = "[" ~> listArgs <~ "]"
    def listArgs:Parser[List[Any]] = list | repsep(args, ",")
    def args:Parser[String] = "(.)*".r
}
Run Code Online (Sandbox Code Playgroud)

是否有可能将前两个解析器的类型参数转换为更具体的?类似于任意维度但具有相同底层类型的嵌套列表的一般参数.

scala parser-generator

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

使用alsalib时的奇怪C行为

当我尝试使用ALSA库时,我获得了C代码的奇怪行为.我使用此代码生成设备的sid

snd_mixer_selem_id_t*
getSid(){
  snd_mixer_selem_id_t *sid;
  snd_mixer_selem_id_alloca(&sid);
  snd_mixer_selem_id_set_index(sid,0);
  snd_mixer_selem_id_set_name(sid, selem_name);

  return sid;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过访问此功能

snd_mixer_t *handle = getHandle();
snd_mixer_selem_id_t *sid = getSid();

snd_mixer_elem_t *elem = snd_mixer_find_selem(handle,sid);
Run Code Online (Sandbox Code Playgroud)

getHandle()是一个获得卡处理程序的等效函数,但这个工作正常.奇怪的是,如果我在使用函数之前直接使用snd_mixer_find_selem函数代码就可以了.我不得不说我是C的新手,这是我的第一个项目之一,所以这可能是初学者对指针的错误.

错误消息是 simple.c:282: snd_mixer_selem_get_playback_volume_range: Assertion 'elem' failed.

那么有谁知道问题是什么?

这是我使用的代码的最小示例:

#include <alsa/asoundlib.h>

static const char *selem_name = "Master";
static const char *card = "default";

snd_mixer_t*
getHandle(){
  snd_mixer_t *handle;

  snd_mixer_open(&handle, 0);
  snd_mixer_attach(handle, card);
  snd_mixer_selem_register(handle, NULL, NULL);
  snd_mixer_load(handle);

  return handle;
}

snd_mixer_selem_id_t*
getSid(){
  snd_mixer_selem_id_t *sid;
  snd_mixer_selem_id_alloca(&sid);
  snd_mixer_selem_id_set_index(sid,0);
  snd_mixer_selem_id_set_name(sid, selem_name);

  return sid;
}

void
incMasterVol(long step){ …
Run Code Online (Sandbox Code Playgroud)

c alsa

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

标签 统计

alsa ×1

c ×1

parser-generator ×1

scala ×1