统一技术面谈

2020-10-15 06:55:08

阿伊莎的手让你心烦意乱。它们轻轻地漂浮在她的肩膀前面,手腕向后翘起。当她与招聘经理开玩笑时,一个人兴高采烈地摇晃着-她涂了漆的指甲在赭色的棕榈树上呈现出青色的马赛克。他们飞来飞去,然后在两个女人安排午餐时短暂地盘旋。门关上后,艾莎急切地用指尖拍打松木单板桌面。你以前在哪里见过他们?

但她正在咯咯笑着,很高兴终于见到了你,她的头发在她黄色太阳裙的肩膀上松散地卷着,你喜欢她,这位30多岁的工程师,已经在这里工作了三年(即使你不确切地知道她是为Minonal Analytics,Limited做什么的),她听说你在市场上,就不得不亲自采访你。她会告诉你酸奶吧、瑜伽馆,以及工作和生活平衡对公司的重要性。然后她让你平衡一棵二叉树。

即使过了这么多个世纪,移植四肢仍然有困难。“对不起,你得给我一点时间,”你拖延了一下。“我永远不能把转型规则保持在正轨上。”

Vidran@Bamse>;swpl;“提醒我,Aisha-我们需要确保两个分支的高度相同?还是只差一个?“。

“在每一个层面上。”她交叉双臂,给你一个喘息的机会。“你想让我让我们开始吗?”

Eval_prim(Exp,_,Exp):-Exp=nil;Exp=[];Number(Exp)。“我们先从码头开始。Nils、空列表和数字--这应该是一个很好的开始,你不这样认为吗?“。

“你知道我们需要平等的约束。另外,对于树的高度也是如此。“。

:-USE_MODULE(库(Reif))。Eval_prim([eq,A,B],env,R):-eval_exp(A,env,ares),eval_exp(B,env,bres),if_((are=bres),R=true,R=nil)。Eval_prim([plus,A,B],Env,R):-eval_exp(A,Env,AR),eval_exp(B,Env,BR),R为AR+BR。Eval_exp(Exp,Env,R):-eval_prim(Exp,Env,R),!钟!。她在伤口处吐舌头,吓了你一跳。考虑询问Env的情况,但决定不问:她很清楚自己要去哪里。

Aisha在她的眼镜上方给了你一个非常有见地的眼神,然后从空虚中召唤出一份名单。

Eval_prim([first,list],env,R):-eval_exp(list,env,listR),if_(([]=listR),R=nil,[R|_]=listR)。Eval_prim([rest,list],env,R):-eval_exp(list,env,listR),((listR=[],R=nil);(listR=[_|R]))。Eval_prim([cons,Head,Tail],Env,R):-eval_exp(Head,Env,HeadR),eval_exp(Tail,Env,TailR),IF_((nil=TailR),taill=[],taill=TailR),R=[HeadR|TailR]。“我读过你的作品!走进一家杂货店,你不可能不凭空变出一份购物单。“。

?-eval_exp([cons,2,[cons,1,nil]],{},R)。R=[2,1]。你已经准备好从这里开始了,但是阿伊莎还在继续,钉子敲打着键帽。

Eval_each([],_,[])。Eval_each([X|more],env,[xr|more]):-eval_exp(X,env,xr),eval_each(more,env,more r)。类型(X,R):-(原子(X),R=原子);(数字(X),R=数字);([]=X,R=列表);(函数符(X,';[|]';[|]';,_),R=列表),!;(复合名称_参数(X,λ,_),R=函数),!;(复合名称参数(X,ⴷ,_),R=宏),!;(复合名称参数(X,类型,_),R=类型)。Eval_prim([type,X],env,R):-eval_exp(X,env,xr),type(xr,R)。打个响指,把你的笔记本电脑召回到你的手中。乐器从她手中飞走,你已经站起来,把自己锚定在以太网上,艾莎站在一个流畅的俯冲动作中,当你向后跨一步寻找空间时,一只手伸出来抓住-。

你的笔记本电脑在你们之间盘旋,屏幕上的脸红变成了虹膜。阿伊莎打了个哈欠,检查她的指甲。模糊的不可打印的控制字符手镯环绕着她的手腕,成了发光的环,不可能直接看到。

还记得1921年:当科夫诺河的船头划过寒冷的大西洋之夜时,盐风划过了你的额头。Gardnos Stone冰冷的深坑,裹着粗麻布,称着你的袋子,似乎想要淹死整艘船。它拒绝飞行,拒绝温暖,拒绝理解。女巫会派你去寻找答案:去安特卫普,去维多利亚广场--都是用砖石和铜砌成的,金色的人像在熙熙攘攘的钻石蜂巢的商铺上闪闪发光。

他是塞米安石法师的热切后裔,在世界大都市觉醒的时候从岩石的指尖上释放出来,他在广场南边的一条巷子里开了一家店。Géomancien,Aligaz解释说,对着这个词咯咯笑着,指着闪闪发光的架子:各种颜色的水晶和乳白色的石头,被稳定的煤气灯照耀着。他神气活现地从你的包里拿出那块石头,用轻快的法语告诉你,你需要放松一下。“天哪!”你对侮辱…大发雷霆。但最终,他是对的。

你们交换了咒语和语言,挤在阿利加兹阁楼呼啸而过的铜屋顶下。一起揭开了加德诺斯的神秘面纱,也揭开了彼此的神秘面纱。Aligaz,无穷无尽的创造力,在每一个转折点上都胜过你:在拼图中构建拼图,翻转的锁,成为他们自己的钥匙。他对你关于峡湾的故事感到惊讶,而你反过来也计划和他一起向南旅行,看看他如此亲切地回忆起的埃塞俄比亚风景-但女巫会把你召回到斯卡伊克拉(Skjækra)。这么多年后,他现在可以站在你面前,…

“多美的名字啊!”这件衣服很适合她。“什么时候--”

“哈莱姆。战后。“。在这里,她走到了尽头;也许,在她自己的私人回忆中迷失了方向。

当然,你为阿伊莎感到高兴。宣称自己是真实的自己是所有人的权利,也是所有魔力中最强大的。但是你有这么多问题要问!

“那块石头怎么样了?”你怎么知道的?这么多地方,你在这里干什么?“。

“Vidrun,这是一家地质调查公司。我当然会在这里。问题是你为什么要申请?“。

“我不确定,”她承认。“但是谣言四起,你的风格很有特色。我怎么能错过再次挑战你的机会呢?“。

现在,她咒语的意思变得清晰起来:一个设下的陷阱,不是用来诱捕的,而是用来表现的。她给了你一份礼物。把笔记本电脑还给她,优雅地接受邀请。

绑定(K,V,环境,环境2):-ATOM(K),环境2=环境。放入(K,V)。“我约束你,维德伦,”她吟唱道。她的声音现在承载着塞米恩人、阿尔卑斯山、内华达山脉的份量。一个世纪以来,她被禁足了。

绑定([],_,Env,Env)。Bind([K|Ks],Vs,Env,Env3):-(K=&;(K2),Bind(K2,Vs,Env,Env3),!);([]=Vs,bind(K,nil,Env,Env2),Bind(Ks,[],Env2,Env3));([V1|V1s]=Vs,bind(K,V1,Env,Env2),Bind(Ks,V1s,Env2,Env3))。Eval_var(var,env,R):-ATOM(Var),get_dict(var,env,R)。EVAL_PRIM([QUOTE,R],_,R)。Eval_prim([cond],_env,nil)。Eval_prim([cond,default],env,R):-eval_exp(default,env,R)。Eval_prim([cond,Test,Branch|more],env,R):-eval_exp(Test,Env,TestR),if_((nil=TestR),eval_prim([cond|more],Env,R),eval_exp(Branch,Env,R))。那就来杯里斯普吧。你轻轻地喃喃着,向麦卡锡祈祷。希望Aisha不会期望您从头开始重新发明lambdas。

Eval_prim([let,[],Body],Env,R):-eval_exp(Body,Env,R)。Eval_prim([let,[K,V|More],Body],Env,R):-eval_exp(V,Env,VR),bind(K,VR,Env,Env2),eval_prim([let,More,Body],Env2,R)。嗯,至少是这样的。连环作业也是-一种奢侈品。但阿伊莎还没有说完。她把脚后跟牢牢地踩在工业密封的混凝土上,张开双臂。她的手掌是红色的红土,她向上的眼睛在卤素星光下闪烁着磁铁矿。

Evoke(Vars,Args,Body,Env,R):-bind(Vars,Args,Env,Env2),eval_exp(Body,Env2,R)。EVAL_APPLICATION([FUN|args],环境,R):-eval_exp(Fun,Env,FunR),FunR=λ(VARS,Body,Env2),eval_each(args,Env,ArgsR),evoke(VARS,ArgsR,Body,Env2,R)。教会。λ微积分。同性恋议程。它知道一千个名字,一千种形式。艾莎双手合十,随着山体的崩塌,召唤了第一千零一人。

Eval_prim([λ,参数,主体],环境,R):-R=λ(参数,主体,环境。PUT(RECUR,R))。会议室不知何故扭曲、折叠。外面,一排排的桌子和办公家具涌向地平线,取而代之的是一片平淡无奇、光线均匀的松树。在桌面上,一个由玻璃和混凝土制成的微型立方体从零开始充气,变成了一个小小的现代主义玩偶屋。你俯身往里看,注意到会议室外的灯光突然变暗了,然后想了想。

Eval_exp(Exp,Env,R):-eval_var(Exp,Env,R),!;eval_prim(Exp,Env,R),!;eval_application(Exp,Env,R),!。艾莎深吸了一口气,恢复了镇静。你感觉到她的咒语快要完成了。

Eval_prim([gensym,Prefix],_Env,R):-ATOM_CONCAT(前缀,';__auto__';,Sym),gensym(Sym,R)。Eval_prim([宏,参数,主体],环境,R):-R=ⴷ(参数,主体,环境)。EVAL_APPLICATION([FUN|args],环境,R):-eval_exp(Fun,Env,FunR),((FunR=λ(vars,body,env2),eval_each(args,env,argsR),evoke(vars,argsR,body,env2,R));(FunR=ⴷ(VARS,BODY,ENV2),EVOKE(VARS,ARGS,BODY,EVOKE,ENV2,CODE),EVEREXP(CODE,ENV,R)。“你真的想看我在空闲的列表上重新发明一个动态类型系统吗?”

Aisha考虑了这种可能性--你会觉得有点伤感--但这不是那种采访。

Eval_prim([struct,Type|Fields],Env,R):-eval_each(Fields,Env,FieldsR),复合名称_参数(R,Type,FieldsR)。Eval_prim([Destruct,Type,Struct],Env,R):-eval_exp(Struct,Env,StructR),复合名称_参数(StructR,Type,R)。当阿伊莎封住咒语时,你的头发充满静电。她的指甲在光线下闪闪发光,在键盘上方的空中留下了青色的痕迹。当她执行最后的命令时,你会感觉到你与安德烈卡的联系被切断了。你现在被锁定在艾莎的微积分里了。

“我很清楚你要说什么,维德伦。您不记得如何平衡二叉树,所以您认为应该定义转换不变量,然后让Prolog为您解决它们。“。

很好。按照传统,撒上盐,放在两个括号里作为保护性的形式。不-你把盐擦干净-方括号。测试这架新飞机的外形。

?-eval_exp([let,[list,[lambda,[&;(Args)],args]],[list,1,2,3]],e{},R)。R=[1,2,3]。虽然不是很多,但这是个开始。艾莎满怀期待地看着你;你需要做点什么。通过召唤代数来拖延时间。

和,[宏,[a,b],[list,[引号,条件],a,b]],或者,[宏,[a,b],[let,[a_,[gensym,a]],[list,[引号,let],[list,a_,a],[cond,a_,a_,b],不,[lambda,[x],[cond,x,nil,[QUOTE,TRUE]],IS_NULL,[lambda,[x],[or,[eq,x,[]],[eq,x,nil]],IS_LIST,[lambda,[x],[eq,[type,x],[QUOTE,LIST]],IS_Pair,[lambda,[x],[AND,[NOT,[IS_NULL,x]],[IS_LIST],X],is_fn,[lambda,[x],[eq,[type,x],[QUOTE,Function],您认为您已经掌握了这方面的诀窍--尽管您已经这么多年没有使用逗号键了。这一切都太冗长了,令人兴奋。

第二,[lambda,[coll],[first,[rest,coll],map,[lambda,[f,coll],[cond,[is_null,coll],[],[cons,[f,[first,coll]],[recur,f,[rest,coll],find,[lambda,[f,coll],[cond,[is_air,coll]],[let,[x,[first,coll]],[cond,[f,x],x,[recur,f,[rest,coll],fold,[lambda,[f,init,coll],[cond,[is_null,coll],init,[recur,f,[f,init,[first,coll]],[rest,coll],rev,[lambda,[coll],[old,[lambda,[list,elem],[cons,elem,list]],[],coll],[rev,[list,1,2,3]]R=[3,2,1]。语法_QUOTE_FN,[lambda,[expr],[cond,[is_null,expr],expr,[is_list,expr],[let,[f,[first,expr]],[cond,[eq,f,[QUOTE,UNQUTE]],[Second,expr],[cons,[QUOTE,LIST],[MAP,RECUR,EXPR],[LIST,[QUOTE,QUOTE],EXPR],SYNTAX_QUOTE,[宏,[EXPR],[SYNTAX_QUOTE_FN,EXPR]],“诚实!”艾莎喃喃地说。“我不知道您一开始想要宏做什么。这真的是平衡一棵树所必需的吗?“。

让你的表情尽可能保持神秘。她可能已经切断了你与安德烈卡女神的联系,但你可以将你自己的神意志化为存在。

Lvar,[lambda,[num],[struct,lvar,num]],is_lvar,[lambda,[x],[eq,[引号,lvar],[type,x]],lvar_num,[lambda,[x],[first,[destruct,foo,x],当Aisha掌握您的方案时,她的下巴都会掉下来。“你一定是在开玩笑。”

“基塞廖夫,弗里德曼,伯德”,你骂我。“我呼唤你,三位一体的人,虽然你从来没有住在这些形体里。希望你也能走这架飞机!“

漫游,[λ,[u,subs],[let,[pr,[and,[is_lvar,u],[find,[lambda,[v],[eq,u,[first,v],[subs],[cond,pr,[recur,[rest,pr],subs],u]],ext_s,[lambda,[x,v,subs],[cons,[cons,X,v],subs]],unify,[lambda,[u,v,subs],[let,[u,[walk,u,subs],v,[walk,v,subs]],[cond,[eq,u,v],subs,[is_lvar,u],[ext_s,u,v,subs],[is_lvar,v],[ext_s,v,u,Subs],[and,[is_air,u],[is_air,v]],[let,[subs,[recur,[first,u],[first,v],subs]],[and,subs,[recur,[rest,u],[rest,v],subs],mero,[],unit,[lambda,[state],[cons,state,mzer],要求平等。有些人会说这是一种约束,但你知道它是基础性的。

Eql,[lambda,[u,v],[lambda,[st],[let,[subs,[unify,u,v,[first,st],[cond,subs,[unit,[cons,subs,[rest,st],mero],call_fresh,[lambda,[f],[lambda,[st],[let,[c,[rest,st],[[f,[lvar,c]],[cons,[first,st],[plus,1,c],“愿他们的未来编织出一幅美丽的挂毯。”你会看到执行的线索在前方奔跑,轮流,交替和组合。

Mplus,[lambda,[a,b],[let,[mplus,recur],[cond,[is_null,a],b,[is_fn,a],[lambda,[],[mplus,b,[a],[cons,[first,a],[mplus,[rest,a],b],bind,[lambda,[stream,Goal],[let,[bind,递归],[条件,[IS_NULL,STREAM],mZERO,[IS_FN,STREAM],[lambda,[],[BIND,[STREAM],Goal]],[Mplus,[Goal,[First,Stream]],[Bind,[REST,STREAM],Goal],disj,[lambda,[G1,G2],[lambda,[STATE],[Mplus,[G1,STATE],[g2,State],conj,[lambda,[G1,G2],[lambda,[state],[bind,[G1,state],G2]]Pull,[lambda,[stream],[cond,[is_fn,stream],[recur,[stream]],ake,[lambda,[n,stream]],[cond,[eq,0,n],[],[let,[stream]],[let,[stream]],Take,[lambda,[n,stream],[cond,[eq,0,n],[],[let,[stream]],[Pull,stream],state,[first,stream]],[cond,state,[cons,state,[recur,[plus,n,-1],[rest,stream]],[],run_raw,[lambda,[n,Goal],[Take,n,[Goal,[cons,[],0],工作完成了,您就放过一口气吧。你的神性迈出了摇摇欲坠的第一步。

?-eval([run_raw,3,[call_fresh,[lambda,[x],[disj,[EQL,x,[QUOTE,AISHA],[EQL,x,[QUOTE,vidran],R=[lvar(0)|aisha]]|1],[lvar(0)|vidran]]|1]。“你这个彻头彻尾的疯女人,”艾莎笑着说。“二叉树怎么平衡,你都不记得了,但你记住了µKanren?”

“它派上用场了!”你口吃。“老实说,它更短了。”以道歉的方式向她赠送一个复制器。

“好吧。很好!“。艾莎假装生气地举起了双手。“我已经让你逍遥法外了!”

Walkr,[lambda,[v,subs],[let,[v,[walk,v,subs],walkr,recur,w,[lambda,[v2],[walkr,v2,subs],[cond,[is_lvar,v],v,[is_air,v],[cons,[w,[first,v]],[w,[rest,v]],v]],reify,[lambda,[state],[map,[lambda,[state],[walkr,[lvar,0],[first,state],States]]“仅针对第一个变量,”您解释道。“但它仍然让事情变得更容易阅读。”

Eval([reify,[run_raw,3,[call_fresh,[lambda,[x],[disj,[EQL,x,[QUOTE,AISHA]],[EQL,x,[QUOTE,vidran],R)。R=[Aisha,vidran]。Aisha看起来像是一个女人,在她轮班六个小时后,她意识到她忘了把烤箱开着。“这就是您需要宏的原因。你想要这个笨蛋翻译器的语法。“

通过进入造物的元性来奖励她的洞察力,让形态从你的指尖溢出。

Zzz,[宏,[g],[let,[state_,[gensym,state],[SYNTAX_QUOTE,[lambda,[[UNQUOTE,STATE_],[lambda,[],[[UNQUOTE,g],[UNQUOTE,STATE_],conjall,[宏,[&;(Gs)],[let,[g,&;(Gs)],[修订版,gs]],[Fold,[lambda,[Form,Goal],[SYNTAX_QUOTE,[CONJ,[zzz,[UNQUOTE,Goal]],[UNQUOTE,FORM],[LIST,[QUOTE,ZZZ],g],GS]],DISJALL,[宏,[&;(GS)],[let,[g,&;(Gs)],[rev,gs]],[Fold,[lambda,[Form,Goal],[SYNTAX_QUOTE,[DJ,[zzz,[UNQUOTE,GOAL]],[UNQUOTE,FORM],g,GS]],CONDE,[宏,[&;(子句)],[CONS,[QUOTE,DISJALL],[MAP,[lambda,[Goals],[CONS,[QUOTE,COJALL],Goals]],子句]],FRESH,[MACRO,[VARS,&;(Goals)],[Fold,[lambda,[form,var],[SYNTAX_QUOTE,[CALL_FRESH,[lambda,[[UNQUOTE,var]],[UNQUOTE,FORM],[CONS,[QUOTE,COJALL],Goals],[rev,vars]],RUN,[宏,[n,vars,&;(Goals)],[SYNTAX_QUOTE,[REIFY,[RUN_RAW,[UNQUOTE,n],[UNQUOTE,[QUOTE,FRESH],[CONS,VARS,Goals]敲开你的指关节,享受从键盘下某个地方发出的一系列嗡嗡作响的流行音乐。“您愿意做这件事吗?”

艾莎,半有趣,半恼火,从她的头皮上拔出一根闪闪发光的头发。手指灵巧,她为零打了个结。

成功,[λ,[n],[cons,[QUOTE,#39;S';],n]],N0,[List,0],SUCCO,[λ,[n,NEXT],[EQL,[SUCC,n],NEXT]],LESSO,[λ,[较小,较大],[LET,[LESSO,RECUR],[FRESH,[g],[SUCO,g,INTHER]],[CONDE,[[EQL,LISER,g]],[[LESSO,LISER,G]],[[LESSO,LISTER,G]],[[LESSO,LISTER,G]],[[LESSO,LISER,G]]。G],MAXO,[λ,[a,b,max],[Conde,[[EQL,a,b],[EQL,max,a]],[[Lesso,a,b],[EQL,max,b。

.