我有一个Emacs Lisp程序,需要跟踪一组字符串,使用它们完成并测试其他字符串以获取集合中的成员资格.在没有内置大多数语言set类型,我会用一本字典或哈希表的虚拟t或1此值,但它发生,我认为的elisp的obarray类型也可以达到目的,用intern,intern-soft以及unintern采取的地方puthash,gethash和remhash.
(我知道cl-lib作为集合在列表上运行的函数,但这些函数与此问题并不特别相关,只需要设置成员资格测试).
在现代Emacs中使用obarray而不是散列表是否有任何优势(速度,内存使用或其他方面),或者是主要符号表之外的obarray更多的是Emacs Lisp之前的剩余部分有一个单独的散列表类型?
我试图在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) 我在我的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参数手动包含它们,还有其他方法可以强制解析目录下的所有源文件吗?
谢谢!
我正在尝试编写一个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的上下文中或者它将如何实现.关于如何做这样的事情,或者如何以不同的方式实现这一目标的任何想法?
我在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)
什么可能出错?
谢谢.
似乎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)
评估看起来非常特殊.但我估计我可能会很困惑.
有人可以帮助我更好地理解这里的模式吗?