《由》续——关于BrainFK的应用(上)
epi.clyce2011/06/23软件综合 IP:上海
/*本文中所有代码未经编译,若有错误,欢迎指正*/

首先感谢来自清华大学的牟瞳指出上一篇文章中的疏漏:
    BrainFk中']'的作用应当是在*p不为零时跳转到前一个(而非后一个)'['之后。
    BrainFK中','的作用是逗号是从终端输入ASCII到指针所指地址。

前一篇文章里我们提到了关于如何使用BrainFK实现动态定位指针的问题,就有人问,为何会对这样一门晦涩的语言产生兴趣
    当初接触BrainFK完全是抱着拾趣的态度,然而当我读懂了一些BrainFK代码之后,我突然强烈的感觉到,BrainFK这种极小化的语言,是有着自身优势所在的
    这种想法并未获得广泛的认可,而对于BrainFk语言较为深入的探讨也更是寥寥无几。
    昨天和小光探讨了一些关于BrainFK语言实际应用方面的问题,在探讨的过程中,我们达成了一个共识:
        在适当的使用下,BrainFK是一种简洁、方便、灵活、高效的语言。
        
    这是我所得到的第一种对于BrainFK明确认可的态度    
    我对嵌入式开发并不很了解,不敢斗胆对小光提出的将BrainFK应用于单片机开发的想法作出评论。
        所以我们的讨论范围依旧围绕PC程序的开发。如果读者里面有精通嵌入式的,欢迎前来讨论。
        
    不,我并不是说单纯的使用BrainFK开发应用程序,那种事情只有闲的DT的人才会去做。
        我的意思是,配合经过改进的BrainFK,进行高效的敏捷开发。
        
    下面我们就来谈谈对于BrainFK便捷性和可读性的改进:
        首先我们看一个例子,用BrainFK输出"Brain FK\n"的代码为:
           +++ +++ +++ + [
                > +++ +++ +
                > +++ +++ +++ +
                > +++
                > +
                <<<< -
            ]
            >   -----
            >>  ---
            >>> ++
            <<<
            
            +.- > +++++++++++++++++.-----------------.++++++++.+++++.-------------
            > .
            <<
            +++++.+++++.----------
            >>>.
            <<<<

        在这里,我们发现,所有的操作符都经过了大量的复用,浪费时间并降低了可读性。
        于是我们引入一个操作计数器的概念,这个概念的灵感来源于vim。
            用过vim的人都知道,vim中大多数命令是可以前置计数器的,比如 9af 将在光标后置入9个'f'
        同样地,我们将这一概念引入BrainFK,不过为了阅读习惯考虑,我们将计数器后置,那么输出"Brain FK\n"的代码为:
            > +65
            > +97
            > +32
            > +10
            
            <<< + .    -
            >   +17 . -17 . +8 . +5 . -13
            >   .
            <<  +5 . +5 . -10
            >>> .
            <4

        这样就大大的缩短了代码的长度,而且增加了灵活性,比如你可以使用+10[>++++<-]++来完成*[1]+42
        
        我们发现,由于'.'的大小关系,这个符号非常影响排版,于是我斗胆作出如下更改:
            使用'!'代替'.'
            '?'代替','
        那么代码变为:
            > +65
            > +97
            > +32
            > +10
            
            <<< +! -
            >   +17! -17! +8! +5! -13 >!
            <<  +5! +5! -10 >>>!
            <4

        
        但是这样的语言依旧不适合开发,昨晚想了一下,要让BrainFK变得实用,她必须作为配角存在,也就是说,她将成为一个辅助工具
        我们将这个工具命名为EBRAINFUCK,全称为"Externed brainFK recalling anchor in note for uneasy C Kicking"
        这个工具引入了一个C/C++函数
            brainfk(<type>*bfpointer, string bfcode)
        于是我们可以将BrainFK代码嵌入到C/C++中。
        当然如果你足够NB还可以写cBrainFK类,可以实现多个BrainFK对象互相计算神马的~
        
        作为示例,我们举一个最最简单的例子:
            我们要写一个非常简单的古典加密算法,将字符串str中所有字符的ASCII加三(A变成C,B变成D,等等),然后倒叙输出
            那么我们可以调用如下函数
                brainfk(str, "
                    [>+3] < [
                        !
                        <
                    ]
                ");

                
            在C++中,'!'可看作“加入到outstream”    
            转换大写为小写的算法更加简单:
                brainfk(str,"[>+32]");
            
        对于cBrainFK类,我们可以写下面的二叉树查找算法:
            XXXXXXXXXXXarch(varToSearch,BSTree,"[[[!>]<>2]<<<]");
        这里'!'表示将*bfpointer的值传递给XXXXXXXXXXXarch(),与其中的varToSearch进行比较。
    至此,我们看到,EBrainFK辅助编写的代码简洁、精致,又不失可读性,如果该库写得好的话,执行也会非常高效。
    
    以上便是对于BrainFk语言实际应用中可行性探讨的上半部分,下半部分中,我们将进行更加深入的探讨。
    
            
            
来自:计算机科学 / 软件综合
4
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
epi.clyce 作者
13年7个月前 IP:未同步
302417
无视我吧,My Brain Is Phucked Up

那个二叉树是错的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
epi.clyce
学者 机友 笔友
文章
345
回复
2156
学术分
21
2007/07/10注册,3个月20天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}