Featured

Popular Articles

Recent Articles

    Looking for your Keys or Cellphone — Always put them in the same place(hook by the door, etc).

    Unpacking your Laptop Power Adaptor — If you go from work to home with your laptop, get an extra adaptor for each work area so you don’t have to unpack and crawl under the desk each time.

    Check Multiple Email Boxes — Get a program that will show you all your email in one place or filter by individual accounts. Apple Mail and several other products do this.

    Losing Telephone Numbers — Your cell phone should sync with your computer.We are past the days where a phone only held 25 numbers. If someone calls, take the few seconds to record their name in your phone, so it will be transfered next time you sync your computer.

    Backing Up to CDs or Disks — Get an external hard drive.It will be fast enough that maybe you’ll go ahead and backup more often. Plus if you do it right, you can create a working version of your entire computer on the hard drive. If you laptop is stolen you can start working from your last backup with all your programs and settings just as they were. (Here are some more tips about relying on technology.)

    Backing Up to CDs or Disks — Get an external hard drive.It will be fast enough that maybe you’ll go ahead and backup more often. Plus if you do it right, you can create a working version of your entire computer on the hard drive. If you laptop is stolen you can start working from your last backup with all your programs and settings just as they were. (Here are some more tips about relying on technology.)

    Visiting Lots of Blogs — Use a news reader like Google Reader or NewsFire. Most people don’t realize how much time they waste looking at the same sites over and over again to see if there is anything new. With a newsreader you’ll know whenever something new is posted.

    Removing Spyware — Use a computer or web browser that doesn’t get infected.

    Wasting Time in the Car — Subscribe to podcasts and get a connector for your MP3 player in your car. Spend your time learning instead of just sitting there driving.

      Posted in 琐事, ... by yujian

      今天看了不少的LISP,主要弄明白了以下内容。

      1.  (SETQ A ‘B)时,为什么符号A没有被EVAL?以前总是弄不明白,什么时候,会进行EVAL,什么时候不会。今天看到了EVAL的流程,大致如图1所示eval.png
        而(SETQ A ‘B)需要特殊处理,所以它的参数A并不会被EVAL。
      2. LISP中list在内存中的表示。以前在那本Artifical Intelligence 就看
        过,和数据结构书上面讲的是一样的。不过,今天看到了lisp种关于内存回
        收的那一部分。LISP中内存是用一个链表来组织的。当需要新的内存的时候,
        从链表的首部取出。当需要回收内存的时候,又把没有用的内存从链表的头部
        放进去。这应该只是一种实现方式,估计还有其它的实现方式。而且这样描述
        太粗糙。

        不过,仍然存在一个很大的问题,就是什么时候以及怎样判断某一块内存不会
        再被用到。因为可能存在很多的符号,指向同一块内存。这样,应该需要一个
        引用计数,当引用计数为0的时候,就可以将内存回收了。但是,这个引用计
        数应该放在哪里呢?

      3. APPEND、NCONC的区别。(APPEND x y):将x拷贝一份,然后将x的最后一
        个元素的cdr指向y。也就是,APPEND的结果中前一部分是从x拷贝出来的,而
        后一部分是和y在同一块内从中的(这点可能会引起一些难以发觉的错误)。而
        (NCONC x y)在链接x和y的时候,并不会给x重新分配内存,它只是简单地将x
        的最后一个指针指向y。在NCONC后,x的值会被改变。总之,如果不小心,
        APPEND和NCONC都会带来一些难以发现的问题,但是,LISP之所以这么做,也
        是出于空间和效率考虑的。
      4. predicate function,返回值为T或者NIL的如:LESSP, NULL,
        MEMBER(MEMBER并不是单纯地返回NIL)等。
      5. 函数调用既不是传值,又不是传参数(这个没有弄明白,感觉它的调用挺
        像传值的)
      6. PRETTY PRINT原来是把程序有缩进地打印出来。
      7. PROG、PROG2、PROGN的使用方法。在今天看的书中,到处都用PROG中加上
        GO来构成循环,风格不太好。而那本书中尽然说:Style of programs is just
        a personal matter!看来两个时代是一定的差别的。在现在,这个团队开发为
        主的软件开发时代,没有人会怀疑风格的重要性了吧。

       

      Posted in 琐事, Lisp, ... by yujian

      组合数学

      13
      Oct
      2007

      以前总是把组合数学当作一门很抽象的东西来学习。所以,在学习过程中,一直只是重视公式的推导,定理的证明,对它本身的应用,并没有太多的重视。最近做题目时才发现,到处都是一些很具体的,现实生活中就存在的问题。
      这才发现组合数学并不是像形式语言、计算理论那样纯粹抽象的东西。抽象是它解决问题以及形成理论的手段,最后还是要回到现实生活中去。进而想想,数学本身也就是这样的,来源于生活,但是它要形成一个严密的体系和广泛的适应性,其本身又必须是抽象的,最后,它又反作用与现实生活中去。

      Posted in 琐事, Lisp, 数学, ... by yujian

      Maxima简介[zz]

      05
      Oct
      2007

      Maxima简介
      目录
      1.概述
      2.关键字
      3.计算
      4.代数
      5.微积分
      6.矩阵计算
      7.Maxima编程
      8.Maxima的一部分函数列表

      1.概述
      在linux下打开Maxima的方法
      1.maxima <enter>
      在电脑上会显示下列介绍:
      Distributed under the GNU Public License. See the file COPYING.
      Dedicated to the memory of William Schelter.
      This is a development version of Maxima. The function bug_report()
      provides bug reporting information.
      (%i1)
      这个(%i1)是一个标签,每一个输入输出在它的前面都会有一个标签,i表示你所输入进去的代码(input),o表示电脑对代码作业的响应(output).不要用像%i1或者是%o2这样的变量名,因为这样很容易与标签混淆了.
      maxima分辩大小写.所有的内建函数都只有一个小写的函数名如(sin,cos,save,load,etc).内建的常值也有一个小写的名字(% e,%pi,inf,etc).如果你键入SIN(x)或者是Sin(x),Maxima会把它当作和sin(x)不同的函数来处理.用户自己定义函数和 变量名的时候大写小写都可以选择.foo(XY),Foo(xy),FOO(xy)都是不同的函数.

      2.关键字
      1.结束maxima时,键入quit();
      2.中断maxima而不离开时,用快捷键Ctrl+c.知道怎样使用这种中断的方法很重要,举个例子,如果你在做一个要费很长时间的计算 ,如
      (%i)sum(1/x^2,x,1,100000);
      maxima encountered a lisp error:
      console interrupt.
      Automatically continuing.
      to reenable the lisp debugger set *debugger-hook* to nil.
      (%i2)
      3.用符号;告诉maxima你输入的命令结束,然后点回车.
      4.另外一个结束的命令符是$,但是它不在屏幕显示出maxima计算的结果.这对于有很长的中间过程变量的计算来说是很有用的,因为你不需要花费很长的时间让它显示在屏幕上.
      5.如果你不想输入刚才你已经输入的命令,打个比方你想输入你刚才输入的第五行(%i5),你只要在前面加上一对单引号,如,”%i5.
      6.如果你想得到maxima当前运行的结果,你可以用它的O标签,也可以用特特殊的显示符号(%);
      7.标准量,e,i,pi在maxima中用%e,%i,%pi,来表示.

      3.计算
      一般运算符
      + 加
      - 减
      * 乘
      / 除
      ^ 幂
      . 矩阵计算
      sqrt(x) x的平方根
      maxima的输出用精确有理数表达出来:
      (%i1) 1/100 + 1/101;
      201
      (%o1) —–
      10100
      如果计算中出现了一些无理的数,那么它会用符号表示出来 :
      u%i2) (1 + sqrt(2))^5;
      5
      (%o2) (sqrt(2) + 1)
      (%i3) expand (%);
      (%o3) 29 sqrt(2) + 41
      但是,它也常常表达为十进制数,这个方法的表达了”,numer”:
      (%i4) %, numer;
      (%o4) 82.01219330881976
      注意这里用到的%是指先前计算的那个值.这个版本的maxima,number显示了一个16位的值,后面几位常常是不可靠的.但是
      用bfloat能够提供一个任意高的精度.
      (%i5) bfloat (%o3);
      The number of significant figures displayed is controlled by the Maxima variable fpprec, which has
      the default value of 16:
      值的显示精度是由maxima的fpprec来控制的,它的默认值是16
      (%i6) fpprec;
      (%o6) 16
      这里我们可以重新设定它的值:
      3
      (%i7) fpprec: 100;
      (%o7) 100
      (%i8) ’’%i5;
      (%o8) 8.20121933088197564152489730020812442785204843859314941221#
      2371240173124187540110412666123849550160561B1

      没有近似估计的大数:
      (%i9) 100!;
      (%o9) 9332621544394415268169923885626670049071596826438162146859#
      2963895217599993229915608941463976156518286253697920827223758251#
      185210916864000000000000000000000000

      4代数
      Maxima’s importance as a computer tool to facilitate analytical calculations becomes more evident
      when we see how easily it does algebra for us. Here’s an example in which a polynomial is expanded:
      maxima作为一个计算工具的重要性是它能使方便的分析和计算更加现实。下面是多项式展开的一个例子:
      (%i1) (x + 3*y + x^2*y)^3;
      2 3
      (%o1) (x y + 3 y + x)
      (%i2) expand (%);
      63 43 23 3 52 32
      (%o2) x y + 9 x y + 27 x y + 27 y + 3 x y + 18 x y
      2 4 2 3
      + 27 x y + 3 x y + 9 x y + x
      Now suppose we wanted to substitute 5/z for x in the above expression:
      现在假设我们在上一个式子中要用5/z来代替x:
      (%i3) %o2, x=5/z;
      2 3 2 3
      135 y 675 y 225 y 2250 y 125 5625 y 1875 y
      (%o3) —— + —— + —– + ——- + — + ——- + ——
      z 2 2 3 3 4 4
      z z z z z z
      2 3
      9375 y 15625 y 3
      + ——- + ——– + 27 y
      5 6
      z z
      The Maxima function ratsimp will place this over a common denominator:
      在maxima中函数ratsimp将会合并分母相同的项:

      (%i4) ratsimp (%);
      36 25 3 4
      (%o4) (27 y z + 135 y z + (675 y + 225 y) z
      2 3 3 2 2
      + (2250 y + 125) z + (5625 y + 1875 y) z + 9375 y z
      3 6
      + 15625 y )/z
      Expressions may also be factored:
      表达式同样也能合并:
      4
      (%i5) factor (%);
      2 3
      (3 y z + 5 z + 25 y)
      (%o5) ———————-
      6
      z
      maxima同样也能精确的解出非线性系统代数方程。下面这个例子中,我们将解带有三个未知数a b c的三个方程:
      (%i6) a + b*c = 1;
      (%o6) bc+a=1
      (%i7) b - a*c = 0;
      (%o7) b-ac=0
      (%i8) a + b = 5;
      (%o8) b+a=5
      (%i9) solve ([%o6, %o7, %o8], [a, b, c]);
      25 sqrt(79) %i + 25 5 sqrt(79) %i + 5
      (%o9) [[a = ——————-, b = —————–,
      6 sqrt(79) %i - 34 sqrt(79) %i + 11
      sqrt(79) %i + 1 25 sqrt(79) %i - 25
      c = —————], [a = ——————-,
      10 6 sqrt(79) %i + 34
      5 sqrt(79) %i - 5 sqrt(79) %i - 1
      b = —————–, c = - —————]]
      sqrt(79) %i - 11 10

      注意这个显示包括两个[],每一个中括号的里面都是联立方程的一组精确解。

      三角函数在maxima中的计算也是很简单的。
      函数trigexpand可以使每一个三角函数都最简化:
      (%i10) sin(u + v) * cos(u)^3;
      3
      (%o10) cos (u) sin(v + u)
      (%i11) trigexpand (%);
      3
      (%o11) cos (u) (cos(u) sin(v) + sin(u) cos(v))

      函数trigreduce是使表达转换成另外一种形式,那种形式是一种和的形式,它只包含一种sin 或 cos 函数。
      (%i12) trigreduce (%o10);
      sin(v + 4 u) + sin(v - 2 u) 3 sin(v + 2 u) + 3 sin(v)
      (%o12) ————————— + ————————-
      8 8

      函数realpart imagpart是返回一个复数的实部和虚部的值:
      5
      (%i13) w: 3 + k*%i;
      (%o13) %i k + 3
      (%i14) w^2 * %e^w;
      2 %i k + 3
      (%o14) (%i k + 3) %e
      (%i15) realpart (%);
      3 2 3
      (%o15) %e (9 - k ) cos(k) - 6 %e k sin(k)

      5微积分
      Maxima can compute derivatives and integrals, expand in Taylor series, take limits, and obtain exact solutions to ordinary differential equations. We begin by defining the symbol f to be the following function of x:
      maxima能计算微分和积分,展开泰勒级数,求极限和精确的求解常微分方程。首先我们先定义一个以x为自变量的函数f:
      (%i1) f: x^3 * %e^(k*x) * sin(w*x);
      3 kx
      (%o1) x %e sin(w x)
      We compute the derivative of f with respect to x:
      我们求f关于x的导数:
      (%i2) diff (f, x);
      3 kx 2 kx
      (%o2) k x %e sin(w x) + 3 x %e sin(w x)
      3 kx
      +wx %e cos(w x)
      Now we find the indefinite integral of f with respect to x:
      现在我们求f关于x的不定积分:
      (%i3) integrate (f, x);
      6 34 52 7 3
      (%o3) (((k w + 3 k w + 3 k w + k ) x
      6 24 42 6 2
      + (3 w + 3 k w - 3 k w - 3 k ) x
      4 32 5 4 22 4
      + (- 18 k w - 12 k w + 6 k ) x - 6 w + 36 k w - 6 k )
      kx 7 25 43 6 3
      %e sin(w x) + ((- w - 3 k w - 3 k w - k w) x
      5 33 5 2
      + (6 k w + 12 k w + 6 k w) x
      5 23 4 3 3 kx
      + (6 w - 12 k w - 18 k w) x - 24 k w + 24 k w) %e
      8 26 44 62 8
      cos(w x))/(w + 4 k w + 6 k w + 4 k w + k )
      A slight change in syntax gives definite integrals:
      在语法上的一些小的改变就能求一个定积分:
      (%i4) integrate (1/x^2, x, 1, inf);
      (%o4) 1
      (%i5) integrate (1/x, x, 0, inf);

      积分是发散的:
      Integral is divergent
      – an error. Quitting. To debug this try debugmode(true);

      Next we define the simbol g in terms of f (previously defined in %i1) and the hyperbolic sine function,and find its Taylor series expansion (up to, say, order 3 terms) about the point x = 0:
      我们定义一个字符g 它是由f函数和sin函数表达,并求出在x=0处泰勒级数的展开:
      (%i6) g: f / sinh(k*x)^4;
      3 kx
      x %e sin(w x)
      (%o6) —————–
      4
      sinh (k x)
      (%i7) taylor (g, x, 0, 3);
      2 3 2 2 3 3
      w wx (w k + w ) x (3 w k + w ) x
      (%o7)/T/ — + — - ————– - —————- + . . .
      4 3 4 3
      k k 6k 6k

      求g关于x趋向于0的极限:
      (%i8) limit (g, x, 0);
      w
      (%o8) –
      4
      k
      maxima同样能够允许函数微分不进行计算表达出来,它的形式为:
      (%i9) ’diff (y, x);
      dy
      (%o9) –
      dx
      The quote operator in (%i9) means “do not evaluate”. Without it, Maxima would have obtained 0:
      上面式中’的意思是不计算出来,没有它,maxima就会是0:
      (%i10) diff (y, x);
      (%o10) 0

      Using the quote operator we can write differential equations:
      使用’能使我们写出微分方程:
      (%i11) ’diff (y, x, 2) + ’diff (y, x) + y;
      2
      dy dy
      (%o11) — + — + y
      2 dx
      dx
      Maxima’s ode2 function can solve first and second order ODE’s:
      maxima的ode2 function能解一阶和二阶常微分方程:
      (%i12) ode2 (%o11, y, x);
      - x/2 sqrt(3) x sqrt(3) x
      (%o12) y = %e (%k1 sin(———) + %k2 cos(———))
      2 2
      7

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      反演公式

      04
      Oct
      2007

      以前不怎么明白什么叫做反演。第一次是听到物理老师说反演,当时在将相对论时提到过时间反演不变性和空间反演不变性。不过当时没怎么听明白。

      最近看了组合数学中的反演公式,才明白了反演其实是个涵义非常广泛的词。

      组合数学里面主要讲到了第一反演的定理和莫比乌斯反演定理。看起来这反演比较神奇。它有一种解方程的思想。先用不熟悉的东西去表示熟悉的东西,然后再将不熟悉的东西从中反解出来。

      比如说求错排数D(n),先用D(n)去表示全排列。D(n)本身是表示n个元素{a1, a2, a3…, an},这些元素构成一个排列ai1, ai2, ai3,…ain,并且满足ik != k(即第k个元素不在第k个位置上)的排列的种数。
      因为C(n, k) * D(n-k) 为恰好有k个元素在其本身位置上的个数。所以,C(n,0) * D(n-0) + C(n, 1) * D(n-1) +…+ C(n, n) * D(n - n) = n!
      用二项式反演公式解出D(n) = (-1)0 * C(n, 0) * (n-0)! + (-1)1 * C(n, 1) * (n - 1)! + … + (-1)n * C(n, n) * (n - n)!

      莫比乌斯反演公式就更加有意思了,它可以被应用在任意偏序集上面。书中只举了三各例子,自然数上的小于等于关系,集合上的包含关系,正整数上的整除关系。其中自然书上的小于等于关系非常显然,就是一般的求和公式。不过那个μ函数比较奇特。当n < k 或者 n <= k+2时,μ(k, n) = 0; 当n = k时,μ(k, n) = 1; 当 n = k + 1时,μ(k, n) = -1。将n=0, n = 1... n = k-1, n = k, ...写在一条线上,n = k-1,n = k成了一个分界线,分界线的两边都取0,分界线上取-1和1.

      其中还有一个比较有意思的地方就是泰勒公式的扩展形式。书中将泰勒公式扩展到多项式族上,然后又将微商扩展成了微分算子。这样得到了一些更加有趣的东西。比如g(x) = [x + y]n的展开。
      取多项式族为[x],取微分算子为△,
      kg(0) = n(n-1)(n-2)…(n-k+1)[y]n-k
      这样就得到了[x + y]n的泰勒展开式。
      [x + y]n = g(0) + △1 * [x]1 / 1! + △2 * [x]2 / 2! + …
      = ∑[0≤k≤n] C(n, k) * [x]k[y]n-k
      是不是和二项式定理很像呢?

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      [壹]

      這麽多年 你算什麼 守口如瓶 面對一切的一切的一切的變故

      學會視而不見 而低垂的視綫 終究可以泄漏心裏的暗涌

      不知好歹 百般猜測

      曾經走過的路 一起喧嘩的廣場 鴿子沉默的見證

      而破碎的兩面鏡子是雙重枷鎖 禁錮不安的靈魂

      [貳]

      過去終于不再被提起 那些曾經被你可笑得擺弄的舊時光

      多少人冷靜的看你演出念念不忘

      多少人對妳冷嘲熱諷眼裏流露出不屑和鄙夷

      是一種視而不見 還是一種故作堅強

      沿著鐵路可以走回家 也可以去到某個很遠的地方

      想起某個人 我們暫且稱之爲A 但是你喜歡叫她小离

      离既是 永不相見

      你們曾經互相擁抱 以爲能忘却世間的荒蕪

      你們曾說要一起去每一個城市看每一處風景 要一起走到世界的盡頭去看看那裏的天

      是不是灰色和黑色的沉積

      那些曾經的念念不忘終于不再被提起

      糾纏 反目 不离 陌路

      [弎]

      皮膚開始變得粗糙 那些紅色的小疹子悄悄爬滿你的面

      驚惶失措 日漸蒼老

      你開始喜歡在家裏挂上厚實的黑色窗簾

      你開始變得神經質

      很多事情到了某個點 便會慢慢習慣開去

      妳不再對她 對一個曾經熟悉如今未知的女子驚惶失措 你說你開始學著讓自己變得平和

      你說

      那場戰爭 你們注定棋逢對手

      她注定贏得漂亮 而你 却是一敗塗地

      沉穩收斂

      你學會對著天空發呆 注定不寂寞

      聰明如妳 絕不會從一場戰爭中逃脫又不知輕重地進去另一場戰爭

      你累了 精疲力盡 你說你要休息了

      [肆]

      休息吧 囬去 退囬去

      退回到最初去 留下 亦只能萬劫不復

      回到最初 從新開始生活

      妳會認識新的朋友 妳會喜歡新的電影 聽新的歌手用你不懂的語言低呤淺唱 聲嘶力竭

      妳會喜歡新的香水 吃新口味的冰淇淋 愛上另一種奶茶 選擇別的一切

      有時候我們需要的 就是選擇性的遺忘

      讓記憶模糊 讓過去沉入海底 讓一切被標上回憶的標簽 隨著燃燒的信紙一起成灰

      粘稠的時光 會被加黃 如墻上深深淺淺的老照片

      連空氣里都漂浮著古老的味道

      終有一天 你想起你們曾經擁有彼此的時光還是會微笑

      妳會希望你殘留的記憶都是美好

      [五]

      正是因爲那些遺忘

      你以爲你們曾經相愛過 不要把自己逼進一個死角 不要扭曲的掙吵

      統統不要 妳會咧嘴微笑

      感情到最後只是一個人的事情 愛情 親情 友情

      愛 亦或不愛 你自行了斷

      是的

      妳還是中意原味奶茶 妳還是選擇打完籃球以後慢慢走囬傢 站在大橋的中間

      讓風吹幹你的頭髮

      妳還是喜歡可愛的東西 經歷一場前轉百回

      你依然是一個無可救藥喜歡在陽光下獨自行走的女子 時間沒有改變你 回憶沒

      有改變你 我亦無法改變你

      你已頸厭倦一切即將到來的後果 你將自己擺弄得百折不屈

      [陸]

      記得嗎

      那個湖

      是的

      那隻是一個沒有生命的人工湖

      你終于學著溫良 如那個湖一般 波蘭不驚

      你若喜歡 下次我們還去那裏

      [柒完結]

      幸福 你說你只聽到幸福的名字 卻看不到幸福的樣子

      等吧

      人人都希望自己是仙蒂瑞拉 你知道嗎 灰姑娘之所以美麗 是因爲她最終變成了公主

      是的 等吧

      公主亦是在耐心中方等到王子騎着白馬前來救贖

      也許 也許

      終有那麽一天 我們可以一起遇見幸福

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      Author: Unknown (from The Jargon File)
      Notes: The first several examples are variations of the standard one-liner C quines.

      1. main(){char *c="main(){char *c=%c%s%c;printf(c,34,c,34);}";printf(c,3
      2. 4,c,34);}

      Author: Joe Miller
      Notes: This causes some warnings but should compile fine.

      1. p="p=%c%s%c;main(){printf(p,34,p,34);}";main(){printf(p,34,p,34);}

      Author: John Burger, David Brill, Filip Machi

      1. main(){char q=34,n=10,*a="main(){char q=34,n=10,*a=%c%s%c;printf(a,q,a,q,n);}%c";printf(a,q,a,q,n);}

      Author: Unknown

      1. main(){char*a="main(){char*a=%c%s%c;int b='%c';  printf(a,b,a,b,b);}";int b='"';printf(a,b,a,b,b);}

      Author: Dario Dariol

      1. main(a,b){a="main(a,b){a=%c%s%c;b='%c'; printf(a,b,a,b,b);}";b='"';printf(a,b,a,b,b);}

      Author: Dario Dariol

      1. main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}

      Author: Unknown

      1. char *p="char *p=%c%s%c;main(){printf(p,34,p,34);}"; main(){printf(p,34,p,34);}

      Author: Dario Dariol

      1. main(a){a="main(a){a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}

      Author: Unknown

      1. char f[] = "char f[] =%c%c%s%c;%cmain() {printf(f,10,34,f,34,10,10);}%c";   
      2. main() {printf(f,10,34,f,34,10,10);}

      Author: Thad Smith
      Notes: The author claims that this one is strict ANSI.

      1. #include<stdio.h>
      2. main(){char*c="\\\"#include<stdio.h>%cmain(){char*c=%c%c%c%.102s%cn%c
      3. ;printf(c+2,c[102],c[1],*c,*c,c,*c,c[1]);exit(0);}\n";printf(c+2,c[10
      4. 2],c[1],*c,*c,c,*c,c[1]);exit(0);}

      Author: Torben Mogensen

      1. char *a="\\\"char *a=%c%.1s%.1s%.71s%.1sn%c;main() {printf(a+2,a[1],a,a,a,a,a[1]);}\n"; main(){printf(a+2,a[1],a,a,a,a,a[1]);}

      Author: Joe Miller

      1. #define T(a) main(){printf(a,#a);}
      2. T("#define T(a) main(){printf(a,#a);}\nT(%s)")

      Author: Erkki Ruohtula ([email]eru@tnso04.tele.nokia.fi[/email])

      1. #define n(v,w) v(#w"\nn("#v","#w")");}
      2. n(main(){puts,#define n(v,w) v(#w"\nn("#v","#w")");})

      Author: Paul Hsieh

      1. #define X(Y) main(){printf("#define X(Y) %s\nX(%s)\n",#Y,#Y);}
      2. X(main(){printf("#define X(Y) %s\nX(%s)\n",#Y,#Y);})
      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      不知道是因为图灵的深邃思想让自己胡思乱想太多,还是因为自己的心情太差,总之,昨天晚上头晕晕的,很晚才睡。

      其实感觉前一段时间,过得还是挺充实的。先是校科技创新,和几位兄弟花了不少的精力,取得了一点小小的成绩。后来又是数学建模,结果还没有出来。这些都是与别人合作完成的,很锻炼合作能力。特别是数学建模,感觉我和另外两个队友配合得很默契,我主要做程序有关的,另一个同学做数学方面的,还有一位主要写文档。

      前几个学期,一直在学工程性很强的东西,比如说Linux系统,QT等等。这些花了我不少的时间。现在我想改变一下方式,多学点理论知识。上个学期,看了点lisp,当时是为了了解函数式编程和lambda演算而学的,跟计算理论有一定联系。现在正在看《计算理论导引》感觉挺有意思的。

      不过这几天有点郁闷,同学说我为情所困。我对他说,“不是的,我为我该不该为情所困这个问题所困”。回答貌似很帅,说白了,我还是为情所困。

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      每个人的心,都像上了锁的大门,任你再粗的铁棒也撬不开。惟有关怀,才能把自己变成一把细腻的钥匙,进入别人的心中。

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian

      yacc语法分析器,是怎么根据上下文无关文法去判断一段程序是否符合该文法的呢?《计算理论导引》中的关于上下文无关文法和非确定PDA等价性的证明是用一台非确定的PDA去判断输入是否符合该文法。这个证明的思想和证明DFA与正则表达式是等价的的思想很像。

      记得计算机中正则表达式是被先转成NFA,然后再转成DFA来进行字符串的识别的。莫非yacc中也是使用先将上下文无关文法转成一台与之等价的PDA,然后再用这台PDA去识别该文法所描述的语言?

      然后,如果yacc真是用PDA的话,由于是非确定性的PDA,那它又是如何去用程序实现非确定性的呢?搜索非确定性的每一枝?

      Posted in 琐事, Lisp, 数学, 数学, ... by yujian
      Next Page »