【C#】无中生有
时间:2010-09-30 来源:K#
In Lisp, car, cdr, and cons are fundamental functions.
The cons function is used to construct lists, and the car and cdr functions are used to take them apart.
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
using System;
namespace K_Lib
{
class Program
{
static void Main()
{
var triple = cons("A", cons("B", "C"));
var head = car(triple);
var middle = car(cdr(triple));
var tail = cdr(cdr(triple));
print(head);
print(middle);
print(tail);
}
static Func<Func<dynamic, dynamic, dynamic>, dynamic> cons(dynamic hd, dynamic tl)
{
return x => x(hd, tl);
}
static dynamic car(Func<Func<dynamic, dynamic, dynamic>, dynamic> pair)
{
return pair((hd, tl) => hd);
}
static dynamic cdr(Func<Func<dynamic, dynamic, dynamic>, dynamic> pair)
{
return pair((hd, tl) => tl);
}
static void print(dynamic obj)
{
Console.WriteLine(obj);
}
}
}
cons、car、cdr共同构造了抽象数据结构:
对任意的x, y都满足
car(cons(x,y)) -> x
cdr(cons(x,y)) -> y
代码中的triple实际上是个Func!看cons的实现之前,还以为它是个单链表。
也就是说,从函数抽象出了数据。就好比,无形的能量转化成了有形的物质。
现在,我敢说,"我不会编程了"!看到这样的代码,我的大脑非常混沌!
只是我编程中遇到的瓶颈之一!
相关阅读 更多 +