Login
Create new posts
你们懂它在做啥吗?我目前不是很懂
;; A simple CPS transformer which does proper tail-call and does not
;; duplicate contexts for if-expressions.
;; author: Yin Wang ([email protected])
(load "pmatch.scm")
(define cps
(lambda (exp)
(letrec
([trivial? (lambda (x) (memq x '(zero? add1 sub1)))]
[id (lambda (v) v)]
[ctx0 (lambda (v) `(k ,v))] ; tail context
[fv (let ([n -1])
(lambda ()
(set! n (+ 1 n))
(string->symbol (string-append "v" (number->string n)))))]
[cps1
(lambda (exp ctx)
(pmatch exp
[,x (guard (not (pair? x))) (ctx x)]
[(if ,test ,conseq ,alt)
(cps1 test
(lambda (t)
(cond
[(memq ctx (list ctx0 id))
`(if ,t ,(cps1 conseq ctx) ,(cps1 alt ctx))]
[else
(let ([u (fv)])
`(let ([k (lambda (,u) ,(ctx u))])
(if ,t ,(cps1 conseq ctx0) ,(cps1 alt ctx0))))])))]
[(lambda (,x) ,body)
(ctx `(lambda (,x k) ,(cps1 body ctx0)))]
[(,op ,a ,b)
(cps1 a (lambda (v1)
(cps1 b (lambda (v2)
(ctx `(,op ,v1 ,v2))))))]
[(,rator ,rand)
(cps1 rator
(lambda (r)
(cps1 rand
(lambda (d)
(cond
[(trivial? r) (ctx `(,r ,d))]
[(eq? ctx ctx0) `(,r ,d k)] ; tail call
[else
(let ([u (fv)])
`(,r ,d (lambda (,u) ,(ctx u))))])))))]))])
(cps1 exp id))))
;;; tests
;; var
(cps 'x)
(cps '(lambda (x) x))
(cps '(lambda (x) (x 1)))
;; no lambda (will generate identity functions to return to the toplevel)
(cps '(if (f x) a b))
(cps '(if x (f a) b))
;; if stand-alone (tail)
(cps '(lambda (x) (if (f x) a b)))
;; if inside if-test (non-tail)
(cps '(lambda (x) (if (if x (f a) b) c d)))
;; both branches are trivial, should do some more optimizations
(cps '(lambda (x) (if (if x (zero? a) b) c d)))
;; if inside if-branch (tail)
(cps '(lambda (x) (if t (if x (f a) b) c)))
;; if inside if-branch, but again inside another if-test (non-tail)
(cps '(lambda (x) (if (if t (if x (f a) b) c) e w)))
;; if as operand (non-tail)
(cps '(lambda (x) (h (if x (f a) b))))
;; if as operator (non-tail)
(cps '(lambda (x) ((if x (f g) h) c)))
;; why we need more than two names
(cps '(((f a) (g b)) ((f c) (g d))))
;; factorial
(define fact-cps
(cps
'(lambda (n)
((lambda (fact)
((fact fact) n))
(lambda (fact)
(lambda (n)
(if (zero? n)
1
(* n ((fact fact) (sub1 n))))))))))
;; print out CPSed function
(pretty-print fact-cps)
;; =>
;; '(lambda (n k)
;; ((lambda (fact k) (fact fact (lambda (v0) (v0 n k))))
;; (lambda (fact k)
;; (k
;; (lambda (n k)
;; (if (zero? n)
;; (k 1)
;; (fact
;; fact
;; (lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2))))))))))
;; k))
((eval fact-cps) 5 (lambda (v) v))
;; => 120
1.第一个问题我处理过,但是这完全是小问题,说不上难不难题的。第二个依靠配置解决,也能算难题?甚至不如第一个难,搜索一下就有答案。 2.没怎么了解过双向绑定,不过帖子里说的都是各大博客和文章还有专栏说腻了的东西,经常上网都能知道个大概。没有读过具体的源码。 3.体积太大就压缩,去除无用代码,提取公共代码。原文说的提取第三方库应该说是提取公共代码比较好。延迟加载,按需加载解决了首屏时间问题,但是会导致总量更加大。 4.这个问题很大,最简单的场景下自然是直接去重。 5.暂时没有考虑过优化性能,反正虚拟dom兜底,碰到需要优化的情况再说。immutable.js实现原理不知道,没读过源码,但是性能不错的原因就是原文说的,复用了部分数据,优化了equal 6.没有用过redux-promise和redux-trunk 7.我es6都才刚上手你们就es8了。。。。。。。 8.没用过promise.race。。。。。。 9.不懂css。。。。。。 10.不知道说的啥。。。。。。 11.不懂 12.没用过。。。 13.只用过koa2,没法对比。。。。。 14.没啥说的 15.链路复用,头更精简,没有具体了解过,道听途说。 16.不懂css 17.不知道Etag 太难了,找工作真难。。。。。
我有点想法了,关于实时性会展示错误的中间状态,我们可以等多少秒不输入之后再触发预览,貌似可以轻松用 rxjs 实现,参考它那个著名的搜索框例子。
根据资料 [1],关键在于以下结论 [2]:
frac{sin x}{x} = prod_{n = 1}^infty biggl( 1 - frac{x^2}{n^2pi^2} biggr)
结论的证明,细节见 [3]. 以下简述过程: 将函数 f(x) = cos(mu x),x in (-pi, pi), mu notinmathbb{Z} 傅立叶展开,得到式 1; 由连续性,取 x = pi,可得 cot(mu pi) 的无穷级数展开,得到式 2; 限制 mu < 1,可知式2中的无穷级数一致收敛,对式2在区间mu in (0, x)积分,即得到最初的结论. 要回忆一下复变函数的知识,我们就能解答最初的问题了。 [1] Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web Resource. link [2] Gearhart, W. B. and Schulz, H. S. "The Function sinx/x." College Math. J. 21, 90-99, 1990. [3] R. Courant and F. John. "Introduction to Calculus and Analysis, volume I." Interscience Publishers, John Wiley & Sons. New York, 1965. p. 602.
希望改进为: 只用编译一次,中间过程全部走内存,可选辅助文件是否输出 原生支持unicode 字体选择,原生提供字体回退和自由分区 支持更多图片类型 提高图文混排功能 提高编译器的「智能程度」,减少行间公式环境的数量 其实相当于,基于目前的软硬件水平重新设计和制造。知乎有人估计过,以 google 水平的薪资,大概需要10人*年的工作量。
may help: evaluate prod_{n=1}^infty bigl(1 + frac1{n^2} + frac1{n^4}bigr), from math.se
上面打错了 QAQ 目前还没有修改功能。我好想有点头绪了,用 frac{pi^2}{6}=1+dfrac{1}{2^2}+dfrac{1}{3^2}+cdots 合起来搞搞应该就能看见胜利的曙光。
我感觉可以直观理解一下…… sinh x = x + dfrac{x^3}{3} + dfrac{x^5}{5} + cdots 好吧直观理解不了……无法把里面 pi 的高次项消掉。
不会做 |_・)( _ _)ノ|壁
卧槽,Mathematica 算出来是 dfrac{sinhpi}{pi}!
看这个帖子有感——PyTorch 有哪些坑/bug?——不知道类型系统能不能帮助。
Create new posts