小编Jon*_* O.的帖子

在Emacs Lisp中使用obarray而不是散列表有什么好处吗?

我有一个Emacs Lisp程序,需要跟踪一组字符串,使用它们完成并测试其他字符串以获取集合中的成员资格.在没有内置大多数语言set类型,我会用一本字典或哈希表的虚拟t1此值,但它发生,我认为的elisp的obarray类型也可以达到目的,用intern,intern-soft以及unintern采取的地方puthash,gethashremhash.

(我知道cl-lib作为集合在列表上运行的函数,但这些函数与此问题并不特别相关,只需要设置成员资格测试).

在现代Emacs中使用obarray而不是散列表是否有任何优势(速度,内存使用或其他方面),或者是主要符号表之外的obarray更多的是Emacs Lisp之前的剩余部分有一个单独的散列表类型?

emacs elisp

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

这个函数在Scheme中的时间复杂度是多少?

我试图在Theta表示法中找到此函数的时间复杂度.现在,n是一个正整数,lst是一个包含2个数字的列表.

(define (func n lst)
  (if (= n 0) lst
      (accumulate append null
                  (map (lambda (x)
                         (func (- n 1) (list x x)))
                       lst))))
Run Code Online (Sandbox Code Playgroud)

如您所知,追加的时间复杂度为Θ(n),其中n是列表的总体大小.我试着看看如果我将append和accum积累为Θ(1)函数会发生什么,然后我得到:

T(n)= 2T(n-1)+Θ(1),它是 - >Θ(2 ^ n)

这是否意味着Theta表示法中该事物的实际时间复杂度大于Θ(2 ^ n)?

我甚至不确定我是否对这个假设是正确的,无论如何,如果我需要考虑累积和追加,我对如何做是一无所知......

我在这个上浪费了几个小时,我真的不明白为什么我不能自己解决这个问题...任何帮助都会很高兴.

顺便说一句,这是累积的代码:

(define (accumulate op init lst)
   (if (null? lst)
       init
          (op (car lst)
             (accumulate op init (cdr lst)))))
Run Code Online (Sandbox Code Playgroud)

scheme time-complexity

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

语义,cedet如何强制解析源文件

我在我的emacs c/c ++开发设置中一直在尝试使用cedet和semantic,除了一个小细节之外我对它非常满意.

ede-cpp-root-project用来创建一个项目,并给出我的项目的根目录以及包含文件所在的目录,如下所示:

(ede-cpp-root-project "My Project"
                :name "My Project"
                :file "/path/to/rootdir/AFILE"
                :include-path '( 
                "/include2"
                "/include1"
                               )

                )
Run Code Online (Sandbox Code Playgroud)

这使我可以轻松跳转到函数的声明,semantic-ia-fast-jump但它不会让我接受这些函数的定义.因此它似乎只处理头文件并完全忽略源文件.即使我继续声明该函数并触发semantic-analyze-proto-impl-toggle它,它也会告诉我没有找到合适的实现.

如果我手动打开函数实现所在的源文件,那么它只能通过语义进行解析,并且所有上述函数都能正常工作.

所以我的问题是,如果没有手动打开项目根目录下包含的所有源文件,或者ede-cpp-root-project通过:spp-files参数手动包含它们,还有其他方法可以强制解析目录下的所有源文件吗?

谢谢!

c c++ emacs cedet

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

嵌套正则表达式的Emacs语法高亮显示

我正在尝试编写一个Emacs主要模式来处理生物序列数据(即DNA和多肽),我想实现语法高亮,其中不同的字母颜色不同.由于该模式需要能够区分DNA序列和氨基酸序列并对它们进行不同的着色,我将文件中的每个序列放在一行中,并带有单字符前缀(+或#),表示后续行如何应该突出显示.

因此,例如,如果文件包含一行读取:

+AAGATCCCAGATT
Run Code Online (Sandbox Code Playgroud)

"A"应该都是一种颜色,与行的其他部分不同.

我尝试了以下测试:

(setq dna-keyword
 '(("^\+\\([GCT\-]*\\(A\\)\\)*" (2 font-lock-function-name-face))
  )
)

(define-derived-mode bioseq-mode fundamental-mode
  (setq font-lock-defaults '(dna-keyword))
  (setq mode-name "bioseq mode")
)
Run Code Online (Sandbox Code Playgroud)

但这只匹配最后一个A而不是所有它们.

我的第一个想法是尝试将整行与一个正则表达式匹配,然后使用另一个正则表达式来匹配该行中的A,但我不知道这是否可能在font-lock-mode的上下文中或者它将如何实现.关于如何做这样的事情,或者如何以不同的方式实现这一目标的任何想法?

lisp regex emacs bioinformatics font-lock

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

通过"_id"查询不会使用PyMongo在Python中使用MongoDB返回文件

我在Openshift中使用Python + MongoDB + PyMongo

import os
import gridfs
from django.http import HttpResponse
from pymongo.connection import Connection
from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, RequestContext,loader

connection = Connection('mongodb://sbose78:XXXXXX@staff.mongohq.com:10068/BOSE')
db=connection['BOSE']
fs=gridfs.GridFS(db)
Run Code Online (Sandbox Code Playgroud)

当我通过_id查询文件时,这就是我得到的.

>>> fs.exists({"_id":'504a36d93324f20944247af2'})
False
Run Code Online (Sandbox Code Playgroud)

当我用相应的文件名查询时:

>>> fs.exists({"filename":'foo.txt'})

True
Run Code Online (Sandbox Code Playgroud)

什么可能出错?

谢谢.

python django mongodb pymongo gridfs

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

(list'quote'5)=''5而不是'(引用5)或'(''5)的值是多少?

似乎Common Lisp确实(list 'quote 'x)以特殊方式对待.例如,的值(list 'oddp '5)'(oddp 5)同时的值(list 'quote '5)''5.换句话说,即使由于前面的引用它应该处于数据模式,似乎也会评估引用函数.

比较以下表达式的值:

    1. (list 'quote '5) = (list 'quote 5) = (quote '5) = ''5
    2. (list '' '5) = '(''5)
    3. (list ' 5) = (list 5) = '(5)
    4. (list 'oddp '5) != (oddp 5)
Run Code Online (Sandbox Code Playgroud)

评估看起来非常特殊.但我估计我可能会很困惑.

有人可以帮助我更好地理解这里的模式吗?

lisp list quote

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