未来的用户交互,UNIX风格与windows,mac风格的完美融合

十二月 7th, 2010

未来的用户交互,UNIX风格与windows,mac风格的完美融合
2010-12-07 00:38:14

未来的基础用户交互是触屏(鼠标)+语音,除非是要进行文字输入,否则一般不会用到键盘。

新系统中应该做到这一点:

首先,可以在用户交互中输入程序代码,以完成复杂的功能,命令行交互对于熟练用户和处理复杂事务,通常是最快捷最有效率的,通过命令与管道的恰当的组合,可以完成使用GUI方式根本没法提供的功能,GUI方式一般采用菜单,复杂一些就使用对话框,但功能组合之多,让简单僵化的图形界面没法面面俱到,只能通过调查用户行为,让最常用功能尽可能的方便,这也给开发UI带来了不小的麻烦。

命令行方式对于非熟练用户,学习成本很高,但若将命令行看做一个解释性的代码编辑器,那么把语义分析和智能提示加入其中,显然可以让使用者免除背诵命令的困难。

更为重要的是,以当前的语音识别技术,在不多的一些选项上选择语音最为匹配的项目,早就不是难题了。

稍加努力,我们就可以面对计算机,熟练的说出命令,给出选择,然后让其运行代码。

然而鼠标或者触屏的交互,也是重要的一环,假想这样一个场景,屏幕上呈现了一张图片,你需要处理这张图片,当前需要的处理是,把某个区域拷贝下来,并复制到某个点。

于是你开口说出当前要处理的对象currentimage,然后弹出可以进行的操作,说出一个c,就可以让其选择copy这个方法,这个方法有两个参数,pos1,pos2,分别是两个对角点的位置。
currentimage.copy( pos1, pos2).

这时候你用鼠标在某个位置点击,等待输入的pos1就自动填入了这个位置,然后点击填充pos2。

然后说:“run”,这个操作就完成了。
接下来,如法炮制
currentimage.paste( pos1,pos2).

想象一下这种操作是多么的流畅,一手握着鼠标,一边用语言发出命令,就可以完成各种各样复杂的操作。

这样的软件系统,UI也是非常容易编写的,甚至可以说,这样的软件甚至不需要什么UI设计,没有了菜单系统,没有了专门的对话框,一切都是代码,却变得更加容易使用。

17人浏览 > 修改 > 删除
推荐

2010-12-07 00:46:07: zhang3 (the man who wasn’t there)
  恩,如果这样的话,汉语倒是比英语有点优势。
  
  代码中经常生造单词,所以完全没法知道发音,解决方法要么是不许生造单词,复杂的含义用短语表达,这样就造成名称超长。要么是一个字母一个字母的念,又有点怪异。
  
  而中文就好办了,每个字的发音都是固定的,组合起来也一样。
> 删除

2010-12-07 00:57:20: 魔鄧肯裂解
  很理想化, 但是有很实际的问题:
  使用者会对周围的人产生干扰, 如果是在机房或者网吧这种地方, 就会有满屋的人都在念叨这些命令, 而且这对隐私保护也不好, 旁边的人都有可能听出来你在干什么, 还有可能会被嗓门大的干扰操作(这样需要先加上声纹识别). 就算在家里也是不方便的, 老在那说话, 会打扰休息的人. 我个人也不喜欢一个人对着机器自言自语.
  所以受到场合限制, 或者说是社会文化的制约, 这种设计的应用会十分有限. 如果用一种更安静的方式操控, 比如手势识别, 眼动识别什么的, 也可以达到自然的效果.
  
> 删除

2010-12-07 01:12:04: zhang3 (the man who wasn’t there)
  你说的用户习惯很有道理。
  
  矛盾是,没有一种交流方式比得上语言的丰富性,手势,眼动,都达不到。
  
  不怕吵的技术倒是有了,声源定位就可以,不过几十号人在同一间办公室一起说话很可怕。
  
  也许不出声可以用手语,呵呵,学不会啊。
  
  在搬出来脑机接口这种东西之前,默念的方式应该更符合文化习惯,更实际,也可以被识别。
> 删除

2010-12-07 01:21:26: 魔鄧肯裂解
  我觉得这种界面能否推广的关键在于是否真的让使用者感到舒适自在而不是感到尴尬. 比如手机的无线耳机, 接电话的时候会让使用者看起来在莫名其妙自言自语, 引起他人的注视. 也许只是一两秒注视者就会发现其实那人在打电话, 但对于被频繁注视的人而言这就可能引起不适感.
  这种主观感受比技术上的优越性更重要.
  人的语言通过声音传递, 不同于任何其他的操作方法, 是一种不加密的全方向的广播信息, 比手势之类的视觉信号要暴露得多, 在心理上就给使用者造成一种被监视的压力. 比如, 手机上的语音拨号功能已经面世很久了, 可几乎没见过谁用这个方法拨号的.
> 删除

2010-12-07 01:34:36: whig (清晨听自己说梦话)
  “草!我他妈不跟你说过我吃早饭时别给我放神马U2吗?!”——嗯,它应该能听懂这样的话并且照办。
> 删除

2010-12-07 01:38:23: zhang3 (the man who wasn’t there)
  估计很快就会有心理学家推出“人机交流焦虑综合症”的治疗方法,症状是人机不分,或者对着各种无生命的物体说话。
> 删除

2010-12-07 05:08:56: 意乱情迷
  我觉得还好,打长电话,我基本使用蓝牙耳机。
  对着空气说话,我一直认为很cool——因为你可以两只手不停的打手势,对你还可以对着空气打手势!
  但对着实体屏幕说话还是奇怪一些,所以就等着那个什么什么材料(就是屏幕全息投影在空中,但是可以用手和投影做交互应用)发明出来了。
  当然,最后就是在脖子后面插根儿线啦!
> 删除

2010-12-07 10:45:33: 魔鄧肯裂解
  语音或者手势命令还有一个实际应用的问题, 就是如果用户和别人一边聊天一边操作, 机器如何分辨哪些才是对机器说的话? 尤其是一边用机器和别人语音聊天一边工作的, 或者一边打电话一边操作的, 都很容易造成误操作. 因为这种模式下人体直接发出的所有信号都有可能被机器捕捉, 所以现在利用专门的输入设备(触摸屏, 鼠标键盘等等)来过滤无用的信息是必要的, 让机器真正的”听话”而不是自作聪明. 否则的话跟旁边人聊着天就有可能不小心把自己的文件给删掉了, 或者在屏幕前拿杯子喝口水就可能被机器识别为什么变态的命令. 操作指令的精确性是个问题.

恍然有一种穿越的感觉

十二月 7th, 2010

恍然有一种穿越的感觉
2010-12-06 23:51:13

瞧瞧这些关键词,差点以为是22世纪的编程语言。

一种意向驱动式面向agent程序设计语言 点此下载全文

郭磊 戈也挺 陈世福 张东摩

南京大学计算机软件新技术国家重点实验室,江苏南京,210093;南京大学计算机软件新技术国家重点实验室,江苏南京,210093;南京大学计算机软件新技术国家重点实验室,江苏南京,210093;南京航空航天大学计算机科学与工程系,江苏南京,210016

基金项目:Supported by the National Natural Science Foundation of China under Grant No.60003010 (国家自然科学基金); the National Research Foundation for the Doctoral Program of Higher Education of China under Grant No.97028428 (国家教育部博士点基金)

摘要:
提出了一种意向驱动式面向agent程序设计语言–AOPLID(agent-oriented programming language with intention driver).该语言基于开放式情景演算OSC(open situation calculus),吸收了GOLOG的合理成分,加入对信念、意向、能力、策略等agent心智成分的处理,使用信念修正原语处理通信交互以及事件响应等外因行动,并采用了一种新颖的离线规划和在线执行相结合的运行方式,从而解决了GOLOG语言在应用于面向agent程序设计时不能有效地描述处理 agent心智状态,无法处理外因行动等问题.给出了AOPLID语言语法结构,基于OSC的AOPLID程序语义以及AOPLID程序实例.

关键词:面向agent程序设计 外因行动 情景演算 信念修正

13人浏览 > 修改 > 删除
推荐

2010-12-06 23:53:20: alex00zoe (大繁至简)
  这个应该是对于机器人的语言吧?
> 删除

2010-12-06 23:57:31: alex00zoe (大繁至简)
  各类predicate其实是用来做行为规划的,和思考能力还不是一回事
> 删除

2010-12-07 00:09:04: zhang3 (the man who wasn’t there)
  是的。
  
  不过我前面写过一篇关于走迷宫的日记就说明这种类型的语言在编程上也有相当的用途,在编译,自动编程,用户交互几个方面都可能派上用场。
  
  这让以前的一个设想变得更清晰了,例如极大的简化函数库。
  
  不再需要记忆各个库函数的用法,内容,只需要掌握一种描述法,把需要的一个组合功能描述出来,就可以由库函数组合出来一个适合需要的。
  
  在进行某些约束之后,这个目标是完全可能的,组合方法比较简单,描述很充分。
  
> 删除

STRIPS表示法与编译理论的关系

十二月 7th, 2010

STRIPS表示法与编译理论的关系
2010-12-06 23:29:07

STRIPS表示法:

世界状态:一个世界状态(简称状态)是一组谓词公式的集合
目标:表示世界状态的谓词的合取
动作:动作用前提条件和动作效果来表示。

前提条件:动作执行前必须满足的条件
动作效果:动作执行后可以保证为真的状态

STRIPS是用于动态规划的经典方法,用在代码设计中对动作的定义需要修改,但大意不差。

对于一个简单程序,我们都会在心目中有一个初始状态和目标状态,由输入给出初始状态,目标状态就是我们所需要的输出。

使用声明式代码(函数式与逻辑式)的写法是:
使用逻辑语言描述初始状态与目标状态之间的关系,一旦这个关系描绘得足够完备,这个程序就写成了。

使用命令式代码的写法是:
使用命令式代码写出每一步需要完成的动作。

声明式代码有时候看起来简洁易懂,但执行效率低下,这是因为与冯诺依曼机的机制不匹配所造成的,而编译过程,就相当于一个动态规划,这个动态规划的作用是:

为了达到目标状态(一组谓词公式的集合),我们需要按步骤执行那些动作?

采用了合适的表达方式,我们就可以将编译问题,毫无困难的转化为一个动态规划问题,并使用动态规划的各种理论计算问题的解。

需要注意的是,这个解并不是唯一的,可以想象,在实际的编程中,我们也许平时会采用解释性的代码来进行开发,完全不考虑编译过程,而到了发布产品之前,完全可以动用几十台几百台的电脑进行几天乃至几十天来进行大规模的动态规划计算,找到这个问题更优的解。

数学归纳法的算法形式猜想(扯蛋兼备忘)

十二月 7th, 2010

数学归纳法的算法形式猜想(扯蛋兼备忘)
2010-12-06 18:48:51

代码同构的含义是:两段代码的功能可以被证明为是等价的。同构不是相等,比相等更强,例如两个函数f(n)和g(n)同构的含义不仅仅是对于任意x的函数值相等,而是说它们的代码可以互相做等效变换,这里面的区别在于:

对于任意n,函数值相等,这个论断,包括了无限的概念,无法通过构造性的方法表示出来。而等效变换是对有限代码本身性质的推理,不包括无限的概念。

f(n),g(n)均为一个可计算函数,x为自然数。

1 当n=1时,f(n)=g(n)
2 由f(n)=g(n)同构,可以推出f(n+1)=g(n+1)同构。

求证:f(x)和g(x)的代码是完全同构的。

例如1+2+… +n=n(n+1)/2
对于f(x),代码是:
sum:=0
for(i:=1 to n) do begin
sum:= sum+i;
end

对于g(x),代码是:
sum:=n*(n+1)/2;

假如两个函数在n时等价,那么上面两端代码是等价的。
而在n+1的时候,对于f(x):
sum:=0;
for(i:=1 to n+1) do begin
sum:=sum+i;
end

将最后一次循环体提取出来是等价变化:

sum:=0;
for(i:=1 to n) do begin
sum:=sum+i;
end
sum:=sum+n+1;

由于第一部分等价于g(n),所以等价变换为:
sum:=n*(n+1)/2;
sum:=sum+n+1;

后面的等价变换就是数学了,很容易得到:
sum:=(n+1)*(n+2)/2

很草率的一些想法,也做备忘,这里看起来跟平常用到的数学归纳法似乎一样,但可计算函数的性质和代码的同构变化似乎又带来一些不那么一样的东西。

尤其是,对代码段本身的操作。

可能是一个新的视角。

电脑让你浪费时间;金钱是万恶之源。。。

十二月 7th, 2010

电脑让你浪费时间;金钱是万恶之源。。。
2010-12-06 15:18:47

有人以电脑让你浪费时间为题发出基于经验的抱怨。

果不其然,有人炮轰,有人附和:

> 看到这个标题,想起我认为最恶心的话:金钱是万恶之源。
同感~自己控制不好,反而怪起工具了
归根到底,就是自己的问题,跟电脑有啥关系

这就从见山是山,见水是水的经验的领域进入到了规律的领域:

见山不是山,见水不是水。

大千世界,人间百态,贪瞋痴的执念又岂是一句规律所能了断,再往前走:

见山亦是山,见水亦是水。

对某类人而言,电脑和网络的确是造成效率低下的原因,某种不可抗力导致违反其意愿的外在强制,
反而能让其回到身心健康,充满效率的生活方式中来。巨量的金钱突然降临也可以导致当事人及相关人等心理失衡,走向毁灭,有对历届彩票大奖获得者的追踪采访和赵本山范师傅合演的小品为证。

谁是谁非?谁主谁次?谁因谁果?不可追溯,难以探究。

给众大师所提倡的代码风格唱唱反调

十二月 7th, 2010

给众大师所提倡的代码风格唱唱反调
2010-12-05 15:15:58

现在已经有两个这样的论断似已成为共识:

1 简短的不重复的代码就一定强过啰嗦的代码。
2 声明式代码一定强于命令式代码。

很可惜,这两个论断,在我看来,在不少的场合都不成立,反对的方式也很明确:

1 简短的不重复的代码不一定比啰嗦的代码易懂。
2 声明式代码也未必就比命令式代码易懂。

这里用来反对这两个论断的是我称之为最高原则的“易懂”。

“简短不重复”很容易与“易懂”发生冲突,比如一些大公司的产品说明书,要求高到仅仅识字的人就能够看懂,这导致一些啰嗦,重复的说法。如果要求是用最简短的话将功能做一说明,内文到处是引用参见,像形式系统一样严密,估计能看懂的也就没几个人了。

适当的啰嗦,实际上,对提高易懂程度起到的是很正面的作用。

人脑的思维方式很大程度上就是命令式的,大脑很很容易的记住一个过程,但很难进行多变量的逻辑推理和数学计算。对声明式风格的强加运用,带来编码难度的大大提高,也也就是为什么lisp虽然在范式上大大超越各种编程语言,却一直没有进入软件工业的主流。

有人肯定要提出强烈的反对意见,例如在面向变化和重构方面,命令式代码一直就面临难题,是的,很大程度上是因为现有软件生产力工具的局限,才导致了这样一个局面,而上述的两个原则,只是软件灵活性增强逼得大家不得不想出来的一个权宜之计,也谈不上是解决问题的灵丹妙药。

真正的灵丹妙药是…. ….我已经写了这么多日记了,这是我心目中的银弹。

15人浏览 > 修改 > 删除
推荐

2010-12-05 15:23:15: whig (清晨听自己说梦话)
  同意
> 删除

2010-12-05 15:26:34: zhang3 (the man who wasn’t there)
  我要拿这个去激起公粪了
> 删除

2010-12-05 20:21:10: 超级无敌大灰猫
  软件盲,代码盲,飘过
> 删除

2010-12-06 10:21:06: 船长 (每一天太短 只能做相对要紧的事)
  看了这篇又受益了
  
  几乎所有的计算机的硬件工作都是命令式的
  声明式:是什么或者需要做出什么 命令式:怎么做
> 删除

2010-12-06 15:31:53: alex00zoe (大繁至简)
  命令式是人类一出生刚睁眼睛就会的方式。
  
  而恂恂善诱的以对方为出发点的教育方式,则不是所有人都能掌握的。一般人的情况下,至少需要自己比对方高出一个数量级,才会有足够的底气和自觉去使用这种同理心。
> 删除

2010-12-06 15:33:01: zhang3 (the man who wasn’t there)
  悟空,你第二段又跑题了
> 删除

2010-12-06 15:54:35: alex00zoe (大繁至简)
  你说我嘛?呵呵。我是说对人来说,要掌握声明式方法的难度,高于命令式方法的难度。
  
  命令式方法就相当于整个世界的逻辑都在我的自己的脑海内部,你只需要执行就可以了,至于你能不能执行,执行地好不好,是另一个问题。
  
  而声明式方法就相当于我要为你描述出你所需要关注的那个子世界的逻辑关系和内在构造,然后再告诉你怎么做。
  
  很显然,对于计算机来说,因为目前它们并不真正具备直接对世界产生观察和感知的能力,所有人类必须对于计算机所处理的某个子领域,子世界的逻辑联系和逻辑构造进行充分和完全的建模。这就是说声明式的工作,在概念上是不可避免的。
  
  而一旦当这一工作完成之后,比如说我们拥有了一个画图的函数库之后。接下来的事情就比较偏向于命令式了,我们让它怎么画就怎么画,让它画成什么样就画成什么样。
  
  但是其实两者的意义也是完全等价的。构造画图库的过程也就是命令式的告诉要怎么响应画图命令的过程。而是用画图库画图的过程也就是声明式地描述我们要画的图的内部构造和逻辑。不过如果我们没有一个画图库在先的话,大家做起事情来,无论是给命令,还是更高层次的给声明,都是很麻烦的。一堆不熟练工人在那里,到最后你还是得去教他们。
> 删除

2010-12-06 16:04:38: zhang3 (the man who wasn’t there)
  其实我现在觉得区分很简单:
  
  有时间概念的是命令式,没有时间概念的是声明式。
  线性的语句可交换的是声明式,不可交换的是命令式。
> 删除

2010-12-06 16:09:58: alex00zoe (大繁至简)
  这倒也是一个很好的视角呀。好像数学模型描述的东东确实比较偏向于声明式,没有先后顺序的。而物理规律所产生的作用则是完全声明式的,全时刻作用,没有时间之分的。
> 删除

2010-12-06 16:17:13: 船长 (每一天太短 只能做相对要紧的事)
  可交换的是声明式,不可交换的是命令式。
  这个要宽泛的说吧
  
  对 数学一般关注的重点是 “声明”

这篇区间时态逻辑论文的一个可能的问题

十二月 7th, 2010

这篇区间时态逻辑论文的一个可能的问题
2010-12-04 20:20:38

总算让我揪到一个小辫子,部分的证实了我的猜想。

文中说:

考虑一个命题P,P在一个区间t内的某个子区间内成立,而在另一个子区间内不成立。

所以P(t)在t内是否成立是不确定的,而对P(t)的否定式:~P(t),就居然有了两种解释:

一种强解释,一种弱解释。

这真的是彻头彻尾的错了,时间不应该看做区间,而应该看做一个一个的点,每个命题都是在某个点上才有意义,而动作只会影响这些点的状态,这样来看,时态逻辑并没有什么特别的不平凡的地方。

最重要的是,对计算机中所发生的任何变化,都可以归于带有时钟的时序逻辑电路,对于这样一个系统来说,时间是离散的点,而不是一段一段的区间。

如不这样处理,就会碰到这篇论文里的问题,构造一个形式系统却出现了对否定式的两种解释。

NND,看到这里算了,要不然等把他那套公式推导下来,都啥时候了,而且还是根基不稳的一套理论。

暂时认定他们根本就没把基于图灵计算的特性这个我认为顶顶重要的前提放在心上,而被现实世界的复杂性弄花了眼,让形式系统走入了歧途。

重回闭门造车的轨道:一个简单c语言的解释器。

13人浏览 > 修改 > 删除
推荐

2010-12-04 20:29:01: 散宜生 (君子守时而不待命)
  计算机盲表示压力很大
> 删除

2010-12-04 20:51:28: 超级无敌大灰猫
  内什么,时间在逻辑上有时候是被看成区间的. 因为时间表达不只是点的表达.也有时间段表达的方式
> 删除

2010-12-04 21:00:16: zhang3 (the man who wasn’t there)
  这两种观点区别很大,前提不一样,一种是把时间看做连续的,一种是看做离散的。
  
  看做连续的话,是有问题的。
> 删除

2010-12-04 23:11:59: 超级无敌大灰猫
  恩,如果单为了对付机器逻辑电路,那真不一样.

彻底飞一下:“科学发现的逻辑”的算法

十二月 7th, 2010

彻底飞一下:“科学发现的逻辑”的算法
2010-12-03 14:32:50

前提和背景:

世界是由一台图灵机所运行的程序所构成,这是上帝的代码。

世界中的主体通过与外界的交互响应,尝试对上帝的代码建立内部模型,然后用这样的内部模型去预测外界的响应。

简化:

给你一段程序W,有输入,有输出,在只能通过输入-输出响应来研究这个程序的条件下。

你可以通过什么样的程序P,能够最大程度的模拟这个程序W,并使用这个程序P,去预测你将要得到的输出?

这完全等价于科学发现的逻辑。

通过对科学发现的逻辑建立模型,可以这样精确的推导:

将某个序列的输入I1看做实验1,将预测将要得到的输出看做O1,甚至能够计算出,如果从I1得到了O1,(实验1证实了理论),那么这个证实为这个理论增加了多少置信度?如果没有证实,那么这个理论的置信度下降了多少?理论的各个环节置信度又会发生什么变化?

在一个理论的各个环节中,哪些是拉卡托斯所说的硬核部分?硬核度是多少?

总结:一旦做到了这个程度的建模,对科学理论的研究大概可以全扔给计算机们去做了,人类要做的,大概是两个方面:

1 直觉能力
这是这个系统暂时还可能达不到的地方,这要在进行方案搜索的时候有效的咨询人类的意见。

2 一些需求,比如我们想星际旅行,你们去研究吧,自己去做实验吧,把飞船做好了通知我们一下,当然这些需求需要表达为机器能懂的代码形式。

19人浏览 > 修改 > 删除
1人推荐 推荐

2010-12-03 15:18:54: whig (清晨听自己说梦话)
  嗯,同意。需要硬核是因为,我们通常更需要了解的是某个具体假说的可信度,而不是整栋理论大厦的可信度,若不假定其中某些部分可信度为1,其余部分的可信度无从计算。好像是这样。
> 删除

2010-12-03 15:50:04: zhang3 (the man who wasn’t there)
  硬核的含义很复杂,可能有这样几层意思:
  
  1 搜索策略。在对理论进行调节变化,以满足实验的启发式搜索过程中,硬核是搜索树中比较靠近根部的,动不动就改变硬核就不能充分的搜索到有价值的理论。
  
  2 对理论的认知。
  没有硬核假说,整个理论就变成另外一个理论了,或者构成理论的条件就不存在了。
  
  对两个理论大厦的比较更可能是出于这样一种逻辑,也是一种搜索策略,从哪棵树上进行搜索得到正确理论的可能性更高,根据这种可能性来分配搜索资源。当然,这也只能是概率上的判断。
  
  严格的定义需要一些形式化的工作,这种定义是可能的。
> 删除

2010-12-03 15:57:14: zhang3 (the man who wasn’t there)
  这样的形式化工作也许能够构造,解释,甚至是证明这样的问题:
  
  为什么归纳是有效的?
  为什么演绎具有如此大的威力?
  为什么简洁性是对理论的一个要求,能带来什么好处?
  为什么世界是可理解的?
> 删除

2010-12-03 16:23:37: whig (清晨听自己说梦话)
  对,启发式也有其效率意义。
> 删除

2010-12-03 16:26:49: whig (清晨听自己说梦话)
  硬核/范式的启发意义在模式识别中的意义,Steven Pinker说的比较清楚,而P对W的模拟可以视为一种模式识别任务,和动物对世界的认知类似。
> 删除

2010-12-03 16:27:38: whig (清晨听自己说梦话)
  有没有启发式,是“分析”与“暴力搜索”的差别所在。
> 删除

2010-12-03 17:41:22: zhang3 (the man who wasn’t there)
  形式化构造是解决这些问题的真正有效的方法,自然语言已经不够用了。
  
  比如“易溶于水”明明包括了一个完整的实验过程,为什么它可以做为物品逻辑上的一个属性,并且加到推理链条中。这就涉及到“属性”的构造。我前面把动作归于逻辑构造的方法,就可以用来构造这种属性。
> 删除

2010-12-06 15:47:22: alex00zoe (大繁至简)
  我也很认同“启发式”的观点。不过“启发式”要如何定义,要怎么达到,最重要的是,要如何“由计算机自动地进行某种有效的启发式搜索”,是很成问题的。
  
  这就相当于让计算机看到一个问题的描述之后,自动地给出一个启发式算法,然后再按照算法求解的问题。

一个很变态的函数的反函数求法及应用

十二月 7th, 2010

一个很变态的函数的反函数求法及应用
2010-12-03 13:46:05

函数本身很简单,假定integer_p为正整数类型。

function f(x,y): integer_p
var x,y:integer_p
result := x+y;
end

记其反函数为(伪代码):
function g(z): integer_p
var z: integer_p;
result={x,y};
end
返回值是x,y对的集合。

这种做法看起来是很变态的,因为这个根本没法倒推嘛,这个有什么意思呢?

实际上,它居然是有用的结构:

例如我们求g(10)的含义是:
所有加起来等于10的正整数组合。

这在很多情况下是有用的。

更变态一点,将上面的正整数类型改为整数类型,这下好了,g(10)所代表的,是一个无限集合,其实无限集合也没问题。我们可以在这个无限集合中进行查询,得到有用的有限集合。

这个问题的扩展,包括了很多有趣的结构,例如函数与反函数算法代码之间的关系,用延迟求值表示无限集合。

12人浏览 > 修改 > 删除
推荐

2010-12-03 14:02:49: whig (清晨听自己说梦话)
  嗯,有搞头
> 删除

2010-12-03 14:08:42: zhang3 (the man who wasn’t there)
  跑个题,暂时不搞,这个地盘看起来很有内容,不过是留给数学家的,我搞这个脑子不够快,数学基础也没有。
  
  我还是要专注于语言和平台本身。
> 删除

2010-12-03 14:11:18: zhang3 (the man who wasn’t there)
  不过这个方向很可能是个新领域,是逻辑,数学,和算法的交叉地带,一定存在很多丰富的结构。
> 删除

2010-12-06 15:35:41: alex00zoe (大繁至简)
  必然使用lazy结构才能处理无限的问题。
  
  数学家们其实很多时候也采用整数序列为实例的方式对于命题进行验证。而在这样的过程中他们也能发现规律:就像我们小时候做的那样。
> 删除

2010-12-06 15:39:06: zhang3 (the man who wasn’t there)
  我已经写出来一个直接goto的无限循环的语义分析了。
  
  在语言中引入对自己的语义分析,就可以用无限表达问题了,我好像觉得我这个方法才抓到了本质,比lazy结构高明多了哇哈哈。
> 删除

2010-12-06 16:01:43: alex00zoe (大繁至简)
  自我迭代无限分析么?呵呵。递归是无限的本质么。你的语义分析器应该很牛逼的。
  
  我觉得最牛逼的东西应该就是最简单的东西。除了那个“硬核”(如果是这个说法的话)不能动之外,其它所有的部分,包括它的记忆,它的逻辑,它的思考逻辑的逻辑,它的对于逻辑的思考的逻辑,都是可以变化的,可以被视为逻辑,可以被运算和考虑的。
  
  我对于上面一段话的这个牛逼东西的理解,和我心中对于“自由意志”的理解几乎是等价的。
> 删除

2010-12-06 16:48:39: zhang3 (the man who wasn’t there)
  撒开了说吧~~~~
  
  “硬核”也可以动,给自己升级,就像拉着自己头发上天,形成一个走不出去的自指的怪圈。
  
  也就是没有“硬核”。
  
  反映到实际的工作就是用自己重写自己,再重写,直到它能自己主动重写自己。——-莫非自我意识就此诞生了?
> 删除

2010-12-06 17:00:30: zhang3 (the man who wasn’t there)
  所以我没有试图写出来一个精炼简洁到成为最小内核的那个东西(其实理论上就写不出来),而是用一个差不多的功能还算丰富的大核心来发展,发展到一定程度,通过用新的范式重写自己而变得越来越简洁。
> 删除

2010-12-06 17:03:05: alex00zoe (大繁至简)
  这个想法倒是不错,哈哈。人类的模型就很不简洁,而是由很多很多的冗余和重复才构成了高层的意志的呀

课题备忘:函数与反函数

十二月 7th, 2010

课题备忘:函数与反函数
2010-12-03 13:08:43

这里要说的不是数学上的函数与反函数,而是这样一个编程上的问题:

给定一个函数,f(x)

function f(x)
… …;
return result;
end

请问,如何得到这个函数的反函数?

这个问题就很有意思了。

初步猜测如下:

1 对于某些函数,反函数是可以通过特定的步骤和方法而得到的。
2 对于某些函数,反函数是可以通过猜测和逼近的方法而得到近似解。
3 对于某些函数,反函数不存在。

18人浏览 > 修改 > 删除
推荐

2010-12-06 15:44:12: alex00zoe (大繁至简)
  这是数学问题了,不过如果你1.记住了全部历史,或者2.记住了起始和中间的全部外界输入,和所有的推导规则,那么就不需要反函数了。
  
  有些情况下,或者说很多情况下,使用反函数求解比起使用2的方法要更便捷。