小马驹之友谊魔法吧 关注:26,121贴子:1,868,797

【FIM++】教你怎么给大公主写信

只看楼主收藏回复


你好,你正在阅读的这篇文章是关于FIM++编程语言的中文教程。倘若你也爱好编程,那么你可能已经有所耳闻了。FIM++除本文外目前还没有一个中文教程和文档。我将其发布于此,也想让你了解到这个挺有趣的东西。


1楼2017-08-02 13:26回复
    FIM++:像写信一样编程
    .
    ~ ~ ~
    .
    嗨,你好。我是暮光闪闪(Twilight Sparkle),欢迎来到金橡树图书馆,与我一起学习FIM++!
    如果你了解我,你就知道我曾经每周都会定期给塞拉斯蒂娅(Celestia)公主,我的导师,寄一篇书面报告,来回报我在小马镇(Ponyville)的学习成果。
    而现在,公主要求每一只小马都向她汇报学习情况、生活体验。你一定还不懂得怎么写“皇家信笺”,所以,让我来教你吧!
    =====我不是暮光闪闪,以上内容都是我编的,现在我编不下去了...=====
    好吧,据说FIM++(或FIMPP)是一位小马迷觉得世界上应该存在一种MLP驱动的编程语言,但是找遍了谷歌也一无所获,于是就自己开发出来了(Friendship is Magic Plus Plus,后半部分抄了C++的命名...)。
    我使用的FIM++的编译器基于Java、Scala,所以语法中也拥有一些Java的特性,并可以使用Java的类库。关于FIM++语言,目前还没有一个非常完美的编译器,但是有一套设计文档(见附录2:资源)。我在此教程中选择的编译器是我自认为语法实现较多、错误较少的。
    如果你不会编程,没关系。在我看来,FIM++还算易学——如果你英语水平在初二年级以上。其语法很类似英语的口语表达,所以便于理解。同时,我也尽力讲解地通俗易懂。
    文章部分我会链接到附录1:语法详解,这是作者写的帮助文档,我给它翻译成中文。请一定要配合正文服用哦~
    准备好了?让我们开始吧!


    2楼2017-08-02 13:27
    回复
      2026-02-25 20:07:49
      广告
      不感兴趣
      开通SVIP免广告
      本楼为gitbook地址预留


      3楼2017-08-02 13:28
      收起回复
        # 准备文房四宝
        写信是需要文房四宝对吧,使用FIM++也是如此,所以你需要先安装FIM++的开发环境。
        由于FIM++基于Java开发,所以你需要安装Java并设置环境变量。如果你玩Minecraft,那么你只需要设置环境变量即可。若未安装Java,我建议你安装JDK(Java开发环境)。教程请参见百度经验(http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html)。
        如果你安装了git工具,直接执行下面的代码:
        git clone https://github.com/KarolS/fimpp.git
        或者,来我的OSCHINA国内源下载ZIP包(http://git.oschina.net/juzheng/fimpp/repository/archive/2017
        下载完毕后,打开命令行,cd到项目的bin文件夹里,运行下面代码进行测试:
        fimpp ../examples/hello.fimpp
        如果你使用Windows系统,需要将上面代码中的fimpp改为fimpp.bat。
        若看到命令行中输出Hello, Equestria,则表示安装完美。

        (插图作者:Kopachris)


        4楼2017-08-02 13:30
        回复
          # Hello, Equestria!
          来吧,现在开始写你的第一封信!
          在bin目录下新建文件hello.fimpp,输入以下代码:
          Dear Princess Celestia: Hello Equestria:
          Today I learned about how to say hello.
          I said "Hello, Equestria!".
          Your faithful student, Twilight Sparkle
          保存,打开命令行,运行:

          OK,运行成功,输出了一行文字Hello, Equestria!。想必大公主已经收到你的信函了吧(笑)。
          现在我给你解释一下这四行代码。Dear Princess Celestia:是程序开头,就像写信的开头一样,后面写程序名(或者说信的主题?)。可以随便指定,但是要遵循附录1:标识符的命名规范。然后加个:或.号。
          Today I learned about是主方法开头语句,后面随便指定主方法名称(或者说你学习到的内容?),格式应该为全部小写的英文短语。
          I said是一个输出语句,后面可以写一个变量名,或者符合附录1:变量类型中规定格式的表达式。
          Your faithful student,是程序的结束语,就像写信的落款啦。后面可以跟着任意名字,遵循附录1:标识符中提到的名字即可。
          FIM++不对大小写严格要求,就是说你的信可以这样写:
          dear princess celestia: hello equestria:
          today i learned about how to say hello.
          i said "Hello, Equestria!".
          your faithful student, twilight sparkle
          (但是显然不好看,对吧)
          FIM++支持使用方法(其他语言中的函数在Java中叫方法),方法的定义详见附录1:方法。
          也就是说以上程序可以写成这样:
          Dear Princess Celestia: Hello Equestria:
          I learned about a function.
          I said "Hello, Equestria!".
          That's about a function.
          Today I learned about how to say hello.
          I did a function.
          Your faithful student, Anon
          ······此时的大公主:



          5楼2017-08-02 13:32
          收起回复
            # 附录1:FIM++ 标识符
            标识符应为ASCII序列,可选包括一个'、空格和任意数量的连字符在中间部分。除此之外其他字符都不被允许。Unicode也还不被支持。
            在FIM++中,任何单词都能够成为标识符,除了下面这些:
            about, and, are, did, either, got, had, has, have, I, in, is, like, likes, made, me, my, of, on, only, or, today, was, were, what, when, with, yes
            上面的单词在未来的版本中可能会成为关键字,只有模型(module)名和Java类名例外:你可以随便取用你喜欢的单词。
            标识符不区分大小写。而且,a an the在编译时会忽略不计(所以标识符 the Cutie Mark Crusaders 和 CUTIE MARK CRUSADERS 的表达效果是一样的)。
            下面这些例子是正确的写法:
            Twilight Sparkle
            Crackle's cousin
            Rainbow Dash
            The Great-and-Powerful Trixie
            而下面这些是不正确的:
            The Great and Powerful Trixie (含有and单词)
            DJ-Pon3 (连字符只能放中间,所以两边至少还要有两个单词包着它)
            Flim & Flam (“&”是不被允许的字符)


            6楼2017-08-02 13:33
            收起回复
              # 附录1:FIM++ 方法
              下面所有例子里,你可以用完整的表达式代替伪代码。 位于{...} 里面的部分是可选的。
              语法:
              I learned {about} <标识符: 方法名> {with <一列标识符: 传参变量名>}:
              <语句>
              That's about <标识符: 方法名> {with <标识符: 返回结果变量>}.
              头尾的函数名必须是一样的,否则编译器会报出警告。
              如果方法中有返回结果变量,将会返回给调用者它的值;如果没有,其他同名变量将会被返回。
              一列标识符的写法遵循基本英语规则。牛津逗号是可选的。
              变量范围规则
              默认所有方法中的变量的范围只限于这个方法,除非你这样写:
              Yes, I mean that <变量名>.
              在这个语句中,此变量被声明为全局使用。理论上你可以在其他方法中使用它,因为它驻留在全局内存中。
              取得一个变量的值,编译器会首先取当前方法中的变量,如果找不到就取全局的。(就近原则)


              8楼2017-08-02 13:36
              回复
                # 附录1:FIM++ 变量类型
                这楼被吞,不知怎么涉及敏感人物,请看gitbook原地址:https://juzeon.gitbooks.io/fimpp/%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B.html
                今天先发这么多吧


                10楼2017-08-02 13:39
                收起回复
                  2026-02-25 20:01:49
                  广告
                  不感兴趣
                  开通SVIP免广告
                  顶贴,围观程序大佬


                  IP属地:四川11楼2017-08-02 13:42
                  回复
                    可以


                    IP属地:内蒙古来自Android客户端12楼2017-08-02 13:45
                    回复
                      666666


                      来自Android客户端13楼2017-08-02 17:07
                      回复
                        围观dalao,看到JAVA我就激动


                        IP属地:浙江14楼2017-08-02 19:54
                        收起回复
                          有创意


                          IP属地:江苏来自Android客户端15楼2017-08-02 21:25
                          回复
                            FIM++:从入门到删库跑路


                            IP属地:陕西来自iPhone客户端16楼2017-08-02 22:53
                            收起回复
                              2026-02-25 19:55:49
                              广告
                              不感兴趣
                              开通SVIP免广告
                              假装很懂程序


                              IP属地:广东来自iPhone客户端17楼2017-08-02 23:24
                              收起回复