Archive for 算法-编程

总结的很好,《golang web 编程》作者维护的golang博客:http://beego.me/ 。。。。。。。。。。。。。。。。 我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: <pre lang="golang">import( "fmt" )</pre> 然后我们代码里面可以通过如下的方式调用 <pre lang="golang">fmt.Println("hello world")</pre> 上面这个fmt是Go语言的标准库,他其实是去goroot下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块: 1.相对路径 import “./model” //当前文件同一目录的model目录,但是不建议这种方式来import 2.绝对路径 import “shorturl/model” //加载gopath/src/shorturl/model模块 上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面

Continue

1.数组,Array <tt>make-array</tt> 构造一个数组。 [9]&gt; (make-array '(2 3)) #2A((NIL NIL NIL) (NIL NIL NIL)) [10]&gt; (make-array '(3 3)) #2A((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL)) 其中 n 是数组的维度。 [11]&gt; #2a((1 2 3) (4 4 4)) #2A((1 2 3) (4 4 4)) <tt>可以使用:initial-element</tt> 参数初始化数组元素的值。 [12]&gt; (make-array '(2 3) :initial-element 2) #2A((2 2 2) (2 2 2)) 取出数组内的元素我们调用 <tt>aref,</tt>要替换数组的某个元素,我们使用 <tt>setf</tt> 和 <tt>aref。</tt> &gt; (setf arr (make-array '(2 3))) #2A((NIL

Continue

python中的and-or可以用来当作c用的?:用法。比如 1 and a or b,但是需要确保a为True,否则a为False,还要继续判断b的值,最后打印b的值。 今天看到一个好方法避免这种情况,记录一下: (1 and [a] or [b])[0] 可以保证[a]为True。

Continue

1.映射函数 [1]&gt; (setf l '(1 2 3)) (1 2 3) [8]&gt; (mapcar #'(lambda (x) (+ x 10)) l) (11 12 13) <tt>maplist</tt> 接受同样的参数,将列表的渐进的下一个 <tt>cdr</tt> 传入函数 [9]&gt; (maplist #'(lambda (x) x) l) ((1 2 3) (2 3) (3)) 2.树 看完这一节,才对lisp的其中一个优点有所理解。就像lisp的名字“Lisp” 起初是 “LISt Processor” 的缩写。都是列表啊。 <em>Cons</em> 对象可以想成是二元树, <tt>car</tt> 代表右子树,而 <tt>cdr</tt> 代表左子树。图就不传了,原图有点错误,这个比较好理解。 我们有下面的列表。 [13]&gt; (setf x 1) 1 [15]&gt; (and (integerp x) (zerop (mod x 2))) NIL [16]&gt; (

Continue

1.列表(Lists) <tt>cons</tt>把两个对象结合成一个有两部分的对象,称之为 <em>Cons</em> 对象。概念上来说,一个 <em>Cons</em> 是一对指针; 第一个是 <tt>car</tt> ,第二个是 <tt>cdr</tt> 。 任何非空的列表,都可以被视为一对由列表第一个元素及列表其余元素所组成的列表。 [1]&gt; (setf x (list 'a 'b 'c)) (A B C) [2]&gt; (car x) A [3]&gt; (cdr x) (B C) 看图理解cons。 [caption id="attachment_801" align="alignnone" width="298" caption="lisp list"]<a href="http://0x55aa-wordpress.stor.sinaapp.com/uploads/2012/10/Figure-3.2.png"><img class="size-full wp-image-801" title="lisp list" sr

Continue

1.变量 let引入新的局部变量。 [33]&gt; (let ((x 1) (y 2)) (+ x y)) 3 <tt>defparameter</tt>创造一个全域变量。 [37]&gt; (defparameter *ga* 123) *GA* [38]&gt; *ga* 123 用 <tt>defconstant</tt> 来定义一个全域的常量 [39]&gt; (defconstant limit 8 ) LIMIT [40]&gt; limit 8 检查某些符号,是否是一个全域变量或常数,用 <tt>boundp</tt> <tt></tt>[41]&gt; (boundp 'limit) T [42]&gt; (boundp '*ga*) T 2.赋值 <tt>setf</tt>给全域或局域变量做赋值,如果 <tt>setf</tt> 的第一个参数是一个符号(symbol),且这个符号不是某个局部变量的名字,那么 <tt>setf</tt> 将设置这个符号为全局变量。还是使用 <tt>defpar

Continue

1.<tt>quote</tt> Lisp 提供 <tt>quote</tt> 作为一种<em>保护</em>表达式被求值的方式。Common Lisp 定义 <tt>'</tt> 作为 <tt>quote</tt> 的缩写。 [62]&gt; (quote (+ 3 5)) (+ 3 5) [64]&gt; '(+ 3 5) (+ 3 5) 这意味着 Lisp 程序可以写出 Lisp 代码。 Lisp 程序员能(并且经常)写出能为自己写程序的程序。 2. if [20]&gt; (if t 'a 'b) A [21]&gt; (if nil 'b 'a) A 第一个参数是判断,第二个是为true时求值,第三个是false求值。 3. and和or 逻辑操作符 <strong>and</strong> 和 <strong>or</strong> 与条件式 (conditionals) 类似。两者都接受任意数目的参数,但只对能够决定返回值的那几个参数来作求值。如果所有的参数都为 <tt>真</tt> (即不为 <tt>nil

Continue

符号,字母开头,包括字母数字和连接符。 5 17 -34 +6 2/4 1/3 3.1415 1.722e-15 #c(1.722e-15 0.75) 有趣撒~ lisp支持分数形式,下面几个测试: [1]&gt; (+ 3 2/3) 11/3 [2]&gt; (+ 3.0 2/3) 3.6666667 [3]&gt; (* 2.0 1/3) 0.6666667 [4]&gt; (* 3.0 1/3) 1.0 [5]&gt; (* 3.00 1/3) 1.0 [6]&gt; (/ 3.0 1/3) 9.0 [7]&gt; (/ 2.0 1/3) 6.0 lisp支持复数形式#c(r,i),r为实部,i为虚部。 lisp字符串包含在双引号中,#\a  #\3表示字符。反斜杠为转义字符。 &nbsp; 命名约定:在全局变量开头和结尾带有“*”,常量都已“+”开头结尾。 &nbsp; 构造一个列表:(list 4  5 6) [4]&gt; (cons 'a '(b c)) (A B C)

Continue

又准备开始学lisp,前些时候就想学,但是就怕贪多嚼不烂。现在又想:喜欢就学,先学习语法,不用深。说不定以后就用到。 lisp方言很多,没什么太多了解,先学一个撒~ 下载地址:www.clisp.org,一路next安装windows版完成。 一个lisp的IDE:http://www.daansystems.com/lispide/ [1]&gt; 10 10 [2]&gt; (* 2 3) 6 感觉想极了编译原理里面学的,三元式还是啥的来。 [3]&gt; (format t "hello world") hello world NIL t 是标准输出,NIL是对format求值的结果。列表的第一个元素是函数名。nil代表false,t代表true。 写成函数形式: [4]&gt; (defun hello-world () (format t "hello world")) HELLO-WORLD [5]&gt; (hello-world) hello world NIL 求值后,得到一个名为HELLO

Continue

很不错的教程,讲的很详细。《Network programming with Go》http://jan.newmarch.name/golang/,照着教程写了一个小程序。 &nbsp; <pre lang="golang">//server.go package main import( "fmt" "net" "os" "time" ) func handleClient(conn *net.UDPConn){ var buf [512]byte n, addr, err := conn.ReadFromUDP(buf[0:]) if err != nil{ return } fmt.Println(string(buf[0:])) daytime := time.Now().String() fmt.Println(n,addr) conn.WriteToUDP([]byte(daytime),addr) }

Continue