• Javascript 闭包

    闭包这个概念第一次出现在1964年的《The Computer Journal》上,由P. J. Landin在《The mechanical evaluation of expressions》一文中提出了applicative expression和closure的概念。

    在StackOverflow上的关于闭包的问题描述How do JavaScript closures work? 中有这样一段话,很有意思:

    If you can’t explain it to a six-year-old, you really don’t understand it yourself.

    闭包的定义

    引用维基百科:

    闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

    另一段关于闭包的叙述:

    Also we represent the value of a λ-expression by a bundle of information called a “closure”, comprising the λ-expression and the environment relative to which it was evaluated. We must therefore arrange that such a bundle is correctly interpreted whenever it has to be applied to some argument.

    A closure has an environment part which is a list whose two items are:

    • (1) an environment
    • (2) an identifier or list of identifiers
  • Scheme 中的 Pairs 和 Lists

    Pairs 和 Lists 是 Scheme中的重要的数据类型。

  • Scheme 编程语言

    Scheme 语言是 函数式编程语言,是现代两大Lisp方言之一,诞生于1975年,由 MIT 的 Gerald J. Sussman and Guy L. Steele Jr. 完成。

    本文是根据Teach Yourself Scheme in Fixnum Days学习Scheme的笔记。

    第一个Scheme程序:

    ; the first scheme program.
    (begin
      (display "hello, first scheme program\n"))
    
  • C# 委托、事件与Lambda表达式

    在.NET中,在大部分时间里都没有指针的身影,因为指针被封闭在内部函数当中。可是回调函数却依然存在,它是以委托的方式来完成的。委托可以被视为一个更高级的指针,它不仅仅能把地址指向另一个函数,而且还能传递参数,返回值等多个信息。系统还为委托对象自动生成了同步、异步的调用方式。

  • PageRank的MapReduce化以及SEO分析

    摘要:PageRank是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。它由Larry Page和Sergey Brin在20世纪90年代后期发明。 PageRank实现了将链接价值概念作为排名因素。PageRank算法在搜索引擎领域占据着重要的地位,而在当今互联网规模不断扩大的时代背景下,借助MapReudce框架等技术 手段将PageRank算法并行化具有非常广泛的应用价值。同时,针对PageRank算法设计的SEO策略也对网站的发展有着重要的影响。本文将从PageRank算法的原理和背景出 发,分析算法的实现思路,尝试将PageRank算法MapReduce化,同时,简要从PageRank算法本身出发,讨论SEO和反SEO的思路。

    关键词:搜索引擎, PageRank, MapReduce, SEO

  • 2015-06

  • N皇后问题

    N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。N皇后问题互 不相同的解的个数可以用OEIS A000170序列来表示,如果将旋转和对称的解归为一种,那么独立解的个数符合序列OEIS A002562

    普通递归求解

    N皇后问题的普通解法是通过枚举N的全排列,并判断是否符合条件来得到解的方案数。可以通过一些剪枝技巧来优化运算,提升效率。

  • Rust-Book Effective Rust

    The Stack and the Heap

    栈内存访问比堆内存访问快,局部变量存放在栈上。

    Box: A pointer type for heap allocation.可以使用Box<T> type来申请对内存空间。例如:

    fn main() {
        let x = Box::new(5);
        ley y = 42;
    }
    

    Box分配的堆内存资源可以使用Drop来释放。Rust没有垃圾回收(GC)机制。

    Rust使用jemalloc来进行内存分配,

  • Rust-Book Learn Rust

    Guessing Game

    Our program will generate a random integer between one and a hundred. It will then prompt us to enter a guess. Upon entering our guess, it will tell us if we’re too low or too high. Once we guess correctly, it will congratulate us.

    Set Up

    创建项目:

    cargo new guessing_game --bin
    

    --bin表示创建二进制可执行程序(binary)而不是程序库(library)。

    项目目录结构(cargo build之后):

  • Rust-Book Getting Started

    从零开始学习Rust。

    1. Rust的安装

    略。

    1. Rust版Hello World

    fn main() {
        println!("hello world");
    }
    

    main函数是程序入口。println!中的!表示这是一个宏。

    This is calling a Rust macro, which is how metaprogramming is done in Rust.

  • Polya定理及应用

    概念及定理

    首先是群的概念:

    设 $G$ 是一个集合,$\times$ 是 $G$ 上的二元运算,如果 $(G, \times)$ 满足下面的条件:

    1. 封闭性:对于任何 $a,b \in G$ 有 $a \times b \in G$;
    2. 结合律:对任何 $a,b,c\in G$ 有 $(a \times b) \times c=a \times (b \times c)$;
    3. 单位元:存在 $e\in G$,使得对所有的 $a\in G$,都有 $a \times e = e \times a = a$;
    4. 逆元:对于每个元素 $a\in G$,存在 $x\in G$,使得 $a \times x = x \times a = e$,这个时候记 $x$ 为 $a^{-1}$,称为 $a$ 的逆元,那么则称 $(G, \times)$ 为一个群。

Subscribe via RSS