大话西游中的程序思想_Think in 'A Chinese Odyssey'

大话西游结局是这样的,孙悟空看到至尊宝和紫霞的化身在城楼上,帮助他们紧紧相拥在一起后,转身离开,西天取经去了。这时候紫霞说了句,哪个人样子好怪 哦。至尊宝化身说,我也看到了,他好像条狗诶。如果说孙悟空是至尊宝的原型,那么上次至尊宝死了的时候,原型就脱离了至尊宝,至尊宝就投胎成了现在的夕阳 武士(至尊宝的化身),而夕阳武士现在说,他好像一条狗,是不是在说:自己就像一条狗,只不过他自己不知道他前世是至尊宝?

大话西游看似在讲一个荒诞的爱情故事,但其中有很深刻的程序思想在里面,可以说整部电影就是一个完整的程序原理的实现。

结局的程序结构示意如下:

var zzb = new Object();
var wukong = new Object();
wukong.name = “一条狗”;
zzb.prototype = wukong;
zzb.name = “夕阳武士”;

而第一部《月光宝盒》的程序实现如下:
/*

  • er dangjia created
  • 二当家(吴孟达饰)
    */
    var dangjia = new Object();
    dangjia.name = “二当家”;

/ the chunshisan created
女客春三十娘,春三十娘是蜘蛛精 /
var chunSanshiNiang = new Object();
chunSanshiNiang.name = “春三十娘”;
chunSanshiNiang.prototype = “蜘蛛精”;
//春三十娘勒令群匪找一个脚底有三颗痣的人
chunSanshiNiang.findAManWithThreePointsAtFoot = function(person){
if(person.footHasThreePoints){
return true;
}
return false;
}
//春三十娘欲用迷情大法对付至尊宝,又错用在二当家身上。
chunSanshiNiang.puzzlePerson = function(person){
person.love = this;
}

var finda = chunSanshiNiang.findAManWithThreePointsAtFoot(lightSister);
chunSanshiNiang.puzzlePerson(dangjia);
alert(finda);
alert(dangjia.love.name);

/ tang sanzhuang created
春三十娘错将迷情大法用在二当家身上,生下唐三藏 /
var sanzang = function(man,woman){
var t = new Object();
t.name = “唐三藏”;
return t;
}

/ zhi zhu bao created
孙悟空护送唐三藏去西天取经,半路却和牛魔王合谋要杀害唐三藏,并偷走了月光宝盒。观音大士闻讯赶到,欲除掉孙悟空免得危害苍生。唐三藏慈悲为怀,愿以命相换,观音遂令悟空五百年后投胎作人,赎其罪孽。 /
var zhizunbao = new Object();
zhizunbao.prototype = “孙悟空”;
zhizunbao.name = “至尊宝”;
//紫霞宣布山上的所有东西都归她所有,包括至尊宝在内,并给他盖上记号——三颗痣,宝发觉自己原来真是孙悟空转世。
zhizunbao.getThreePointsByAPerson = function(personName){
if(personName==”紫霞”){
zhizunbao.footHasThreePoints=true;
zhizunbao.name = zhizunbao.prototype;
return zhizunbao.footHasThreePoints;
}
return false;
}

//白晶晶以为春三十娘和二当家生下的孩子是她和至尊宝所生,愤而自刎。至尊宝为了救白晶晶,使用月光宝盒使时光倒流,几次后产生故障,竟将其带回五百年前
zhizunbao.findWhoKillJingjing = function(){
var sawWhoKillJingjing = getBackToBefore(“至尊宝”,”月光宝盒”,2)
if(sawWhoKillJingjing){
return true;
}else{
return false;
}
}

function getBackToBefore(personName,hasPandoraBox,timeline){
var t = parseFloat(Math.random(10)+1);
if(personName&&hasPandoraBox){
if(t==timeline){
return true;
}else{
if(t>timeline){
getBackToBefore(personName,hasPandoraBox,500);
}
if(t<timeline){
return false;
}
}
}
return false;
}

var a = zhizunbao.findWhoKillJingjing();
alert(a);

这里有一个问题是: 至尊宝使用月光宝盒可以回到任意一个之前的时间点,但出现故障无意中会回到500年前,前一个问题可以用数学的理论解释x无限接近一个值,但无法到达,所 以结果无限接近一个值,但无法等于。但回到500年前,似乎完全脱离当前程序结构,而进入另外一个程序体?而当前没有一种语言提倡使用这种做法来改变程序 自己的执行时间点,从而进入另一个方法体。但这种逻辑可以实现吗?

第二部《仙履奇缘》的程序实现如下:
/*

  • the girls zixia and qingxia created
  • 紫霞与青霞本是如来佛祖座前日月神灯的灯芯,白天是紫霞,晚上是青霞
    */
    var lightSister = new Object();
    lightSister.prototype = “灯芯”;
    lightSister.getGirlObject = function(body,day){
    if(day){
    body.name=”紫霞”;
    //紫霞有一誓言,只要谁能拔出她手中的紫青宝剑,就是她的意中人
    body.findLover = function(person){
    if(person.takeSwordOut){
    body.lover = person;
    }
    }
    //紫霞势将水帘洞改为盘丝洞,自封为盘丝大仙
    body.changeHoolName = function(hool){
    if(hool.name==”水帘洞”){
    hool.name =”盘丝洞”;
    }
    }
    }else{
    body.name=”青霞”;
    }
    return body;
    }
    lightSister.getGirlObject(lightSister,true);
    //alert(lightSister.name);

/*

  • 牛魔王的妹妹香香恼恨宝移情别恋,用移形大法将紫霞和猪八戒转换,失误之下又错将自己和沙僧转换。其实紫霞在晚上是青霞,因此和猪八戒转换身体的是青霞
    */
    var xiangxiang = new Object();
    xiangxiang.changeSoulKongfu =function(a,b){
    var t = a.prototype;
    a.prototype = b.prototype;
    b.prototype = t;
    }

//至尊宝变回悟空
zhizunbao.killedByOne = function(){
zhizunbao.name = zhizunbao.prototype;
var wukong = zhizunbao;
wukong.knowWhoIsHisLove= function(){
var trueLove = true;
wukong.takeTrueLove = false;
wukong.regretIt = true;
if(wukong.hasAOpptiunite==true){
wukong.love = sayToGirlLoveHer(“紫霞”);
}
wukong.needloveEndline=true;
setATimeExpiredToLove(wukong.love);

}
return wukong;
}

function sayToGirlLoveHer(girlname){
return “i love you”+girlname;
}
function setATimeExpiredToLove(love){
love.ExpiredTime = 10000;
}

很容易看出大话西游中整体结构是,为一段已有的爱情而回到之前来寻找(发现)另一个爱情,即用爱情创造爱情。而程序中如果要实现的话,则是:执行当前程序并在一定跳出当前程序段,创建并执行另一段程序,即:用程序来创建程序