我正在尝试在elisp中实现我自己的深拷贝例程(因为类似的东西(setq newlist oldlist)似乎只给出了一个浅的副本,并且(copy-sequence newlist oldlist)仍然newlist暴露于元素的任何变化oldlist)
而且,如果有一个功能可以做我想要的功能,那我找不到运气.
我的功能定义是:
(defun deep-copy (iList oList)
(setq oList (car iList))
(setq counter (- (length iList) 1))
(setq iList (cdr iList))
(while (> counter 0)
(setq oList (cons oList (car iList)))
(setq iList (cdr iList))
(setq counter (- counter 1) )))
Run Code Online (Sandbox Code Playgroud)
事后,用iList的(1 2 3 4 5 6)什么oList恰好有是:(((((1 . 2) . 3) . 4) . 5) . 6)
即嵌套列表.
我试过引用,引用,使用追加,切换oList和 …
首先,我意识到大多数基数为10的数字不能在基数2中精确表示,所以我的问题并不是关于浮点运算的不足.
我正在尝试编写一个函数,通过检查最后6个有意义的数字是否在某个容差范围内并将其更改为下一个可表示的某个假设的精确值(仅用于显示目的 - 除非它),尝试通过累积舍入误差来修正双重污染的函数是2的整数或幂.
令我惊讶的是我的函数的一个组件是exp10的输出; 据我所知,只要两个双精度之间的间距小于2,那么存储为双精度的整数值应该是精确的 - 尽管10 ^ 14正在推动它,但这应该是一个精确的整数(因为10 ^ 14) = ~2 ^ 46.507 <2 ^ 53).然而,这不是我的测试所显示的.
我的调试工作的摘录(没有什么突出的显而易见)和输出如下:
double test = 0.000699;
double tmp = fabs(test);
double exp = 10.0 - floor(log10(tmp));
double powTen = exp10(10.0 - floor(log10(tmp)));
double powTen2 = exp10(exp);
double powTen3 = exp10((int)exp);
double powTen4 = exp10(exp);
double powTen5 = pow(10, exp);
printf("exp: %.16lf\n", exp);
printf("powTen: %.16lf\n", powTen);
printf("powTen2: %.16lf\n", powTen2);
printf("powTen3: %.16lf\n", powTen3);
printf("powTen4: %.16lf\n", powTen4);
//these two are exact
printf("10^14: %.16lf\n", …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试以下因子分解函数,但它正在为大量素数爆发:
(defn divides? [N n]
(zero? (mod N n)))
(defn f-reduce [n f & {:keys [expt] :or {expt 0}}]
(if (divides? n f) (f-reduce (/ n f) f :expt (inc expt))
(if (zero? expt) [n []] [n [f expt]])))
(defn _factors [n f known-fs]
(let [[m fs] (f-reduce n f)]
(if (> f (Math/sqrt m))
(cond (and (empty? fs) (= m 1)) known-fs
(empty? fs) (concat known-fs [m 1])
(= m 1) (concat known-fs [f (last fs)])
true (concat known-fs …Run Code Online (Sandbox Code Playgroud) 对于我正在构建的网站(从头开始的第一个网站,对于django而言是新的)我想向管理员提供从管理页面部署图像的方法,这将用于从客户的角度推动业务逻辑.但是,我希望管理员也能够从管理页面查看这些图像.所以我希望可以从应用视图和管理视图访问一个公共图像文件夹.我目前只有一个名为retailFilters的应用程序.
现在实际上将一些文件部署到我的media/images文件夹不是问题,我在管理页面上添加了一条记录(指定要上传的图像),果然,文件正在等待我预期的位置.我也意识到我必须告诉django在哪里为他们提供服务,并且从互联网上寻找我的MEDIA_ROOT,MEDIA_URL和urlpatterns定义为:
settings.py
...
parent_dir = os.path.abspath(os.path.dirname(__file__) + '/..')
MEDIA_ROOT = os.path.join(parent_dir, 'media/')
MEDIA_URL = 'media/'
Run Code Online (Sandbox Code Playgroud)
(和INSTALLED_APPS包括django.contrib.staticfiles))
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
但是,点击它们的响应是管理员因横幅错误而退出:
"使用ID过滤"1 /更改/ media/images/2012-03-29".27.05.jpg"不存在.也许它被删除了?"
我的python版本是2.7.10
我的django版本是1.11
我目前的目录结构(root是项目目录)如下:
.
??? db.sqlite3
??? manage.py
??? media
? ??? images
? ??? 2012-03-29_22.27.05.jpg
??? NOTES
??? retailFilters
? ??? admin.py
? ??? admin.pyc
? ??? apps.py
? ??? fixtures
? ? ??? boltons.json
? ??? __init__.py
? ??? __init__.pyc
? ??? migrations
? …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个小实用程序函数,它将识别以下形式的列表结构的存在:
{{{{{}}}}} or {{} {} {} {}}, and so on ...
Run Code Online (Sandbox Code Playgroud)
我的方法只是编写一个函数,它将递归到给定级别的每个列表的底部,并设置一个标志,如果有的话.
我的问题是,尽管阅读了文档,但请调用以下内容:
proc IsNestedEmpty {i_list} {
if {[string is list $i_list]} {
puts "it was a list"
} else {
puts "it was not a list"
}
}
isNestedEmpty 1
isNestedEmpty ""
isNestedEmpty "jifjsfjsk"
isNestedEmpty [list 1 2 3]
Run Code Online (Sandbox Code Playgroud)
我得到输出:
it was a list
it was a list
it was a list
it was a list
Run Code Online (Sandbox Code Playgroud)
我拥有的tcl版本是8.5检查文档,-strict标志无济于事(测试它是真的) - 是否还有其他方法可靠地检查我的列表是什么?(因为如果我迭代一个实际上是整数的"列表",比方说,我只是回到整数并最终得到无限循环)
编辑:鉴于字符串不会帮助我...我有一个想法,似乎有更多的运气...
proc IsNestedEmpty {i_list {isEmpty 1}} {
if {$isEmpty} …Run Code Online (Sandbox Code Playgroud) 我正在完成一些我发现的一系列在线讲座附带的练习,并且遇到了一个我无法克服的问题,本质上,我在文件中定义了一个函数,如下所示
doubleEveryOtherHelper :: [Integer] -> Int -> [Integer]
doubleEveryOtherHelper ((x:x1:xs) len)
| len > 2 = x : 2*x1 : doubleEveryOtherHelper(xs (len - 1))
| len == 2 = x : 2*x1
| len == 1 = [2*x]
| otherwise = []
Run Code Online (Sandbox Code Playgroud)
加载文件后我得到这个(并且只有这个):
Parse error in pattern: (x : x1 : xs)
Run Code Online (Sandbox Code Playgroud)
不管这个函数可能会或可能不会做什么,如果我设法加载它,有没有办法让 ghci 告诉我它试图以人类可读的形式解析的所有内容,以便我可以自己弄清楚这些事情(即如果我能看到它实际上试图解析的内容(大概是垃圾),而不是我认为它试图解析的内容(一个函数名和两个参数:一个列表和一个 Int,然后返回的列表取决于len 的值)然后修复它应该容易得多)?
我现在所知道的是,由于某种原因,这是错误的(即使有好心的人告诉我在这种情况下我的错误是什么,我也不想再次被与实际情况略有不同的问题所困扰)未来。)