【100 种语言速成】第 2 节:Emojicode

简介: 【100 种语言速成】第 2 节:Emojicode

大多数编程语言都是为了满足一些真正的需求而创建的,但有些只是一种艺术声明。有一个这样的艺术声明是Emojicode语言 —— 自称为“由 emojis 组成的成熟编程语言”。

Hello World

让我们从写 Hello World 开始:

💭𝔀𝓸𝔀
🏁 🍇
  😀 🔤🄷🄴🄻🄻🄾, 🅆🄾🅁🄻🄳🔤❗️
🍉

如你所见,通常的关键字已被表情符号取代:

  • 💭 是注释行
  • 🏁 🍇 ...🍉是主要功能
  • 🔤 就像引号
  • 😀...❗️就像打印
  • 一般来说,❗️ 结束参数列表

字符串和注释的内容不一定是表情符号,但我也用我的应用程序来制作花哨的文字来为它们增添趣味。

变量

我们可以使用 ➡️ 将事物放入变量中。变量在右边,这是相当非常规的选择,但并非完全闻所未闻。🧲 进行字符串插值:

🏁 🍇
  🔤ⓔⓥⓔⓡⓨⓞⓝⓔ🔤➡️who
  😀 🔤🄷🄴🄻🄻🄾, 🧲who🧲🔤❗️
🍉

列表和 for 循环

列表由🍿...🍆. 我得到了第一个表情符号,对第二个不太确定。

你可以使用 循环🔂 iterator list 🍇 body 🍉,这是一个不错的循环表情符号:

🏁 🍇
  🍿
    🔤Python🔤
    🔤JavaScript🔤
    🔤Ruby🔤
    🔤Emojicode🔤
    🔤PHP🔤
  🍆➡️languages
  😀 🔤Most important languages to learn🔤❗️
  🔂 language languages 🍇
    😀 language❗️
  🍉
🍉

FizzBuzz

我们这里还需要提前准备一些东西。

🔂 变量 🆕⏩ start afterend step 相当于 在(start, afterend, step)范围循环 i 🚮 15 🙌 0相当于 i % 15 == 0 ↪️、🙅‍↪️ 和 🙅 相当于 if、else if 和else 有了它,我们可以编写一个 FizzBuzz,也可以使用花哨的字体进行输出:

🏁 🍇
  🔂 i 🆕⏩ 1 101 1 ❗ 🍇
    ↪️ i 🚮 15 🙌 0 🍇
      😀 🔤𝔽𝕚𝕫𝕫𝔹𝕦𝕫𝕫🔤 ❗
    🍉
    🙅↪️ i 🚮 3 🙌 0 🍇
      😀 🔤𝔽𝕚𝕫𝕫🔤 ❗
    🍉
    🙅↪️ i 🚮 5 🙌 0 🍇
      😀 🔤𝔹𝕦𝕫𝕫🔤 ❗
    🍉🙅🍇
      😀 🔤🧲i🧲🔤 ❗
    🍉
  🍉
🍉

函数

我们还需要知道一件事——函数。

我有点迷了,文档里没有说明任何关于函数的内容。它有闭包,所以我们认为这可能有效:

🏁 🍇
  🍇 i 🔢➡️🔢
    ↩️ i➕i
  🍉 ➡️ double
  😀 🔤🧲⁉️ double 21❗🧲🔤❗
🍉

我们需要声明类型。🔢➡️🔢 表示接受一个整数,并返回一个整数。↩️是回报。⁉️...❗ 是函数调用。还不错。

Y组合器失败

不幸的是这些不能递归,所以这根本不起作用!

🏁 🍇
  🍇 n 🔢➡️🔢
    ↪️ n ◀️ 3 🍇
      ↩️ 1
    🍉🙅🍇
      💭 Does not work
      ↩️ ⁉️ fib n➖1❗➕⁉️ fib n➖2❗
    🍉
  🍉 ➡️ fib
  😀 🔤🧲⁉️ fib 5❗🧲🔤❗
🍉

我考虑过使用旧的 Lisp 技巧,并将 fib 闭包作为参数传递给 fib,这样它就可以调用自己,但这只有在没有愚蠢的类型妨碍时才有效。如果类型系统支持递归类型,则类型系统可能支持 Y 组合器,但我认为 Emojicode 不支持。

Classes

它的文档没有说明任何关于函数的内容,但它有类。所以让我们用方法 🚀 定义类 🤖 来做 fib:

🐇 🤖 🍇
  🆕🍇
  🍉
  ❗️ 🚀 n 🔢➡️🔢 🍇
    ↪️ n ◀️ 3 🍇
      ↩️ 1
    🍉🙅🍇
      ↩️ 🚀👇 n➖1❗➕🚀👇 n➖2❗
    🍉
  🍉
🍉
🏁 🍇
  🆕🤖❗️ ➡️ fib
  🔂 i 🆕⏩ 1 31 1 ❗ 🍇
    🚀fib i❗️ ➡️ x
    😀 🔤🧲x🧲🔤❗
  🍉
🍉

如果你已经有了一定的研究,那么这段代码应该不会太难理解。

  • 🆕🤖❗️ ➡️ fib- 创建一个新的🤖并将其分配给fib变量
  • 🚀fib i❗️ ➡️ x- 在实例上调用🚀 fib,使用参数调用我们唯一的方法i
  • 🐇 🤖 🍇 ... 🍉- 定义一个名字为🤖的类(类名必须是表情符号)
  • 🆕🍇🍉- 空构造函数,我们需要为每个类创建一些构造函数,即使它不做任何事情
  • ❗️ 🚀 n 🔢➡️🔢 🍇...🍉- 定义方法🚀...❗️ 接受一个整数参数n并返回一个整数
  • ↩️ 🚀👇 n➖1❗➕🚀👇 n➖2❗- 递归调用,🚀👇 n➖1❗ 是this.🚀(n-1)更常用的语言

统一码

这种语言当然是作为一种艺术声明而创造的(或者如果你更喜欢这样说的话,也可以作为一个笑话),但它提出了一个重要的问题。在整个编程历史中,几乎所有语言(APL 和 Raku 是最值得注意的例外,别担心——我们肯定会在本系列中介绍这两种语言)仅限于带有 ASCII 字符的纯文本。

即使 ASCII 符号显然还不够,所以符号被重用来表示十种不同的东西(尝试列出 JavaScript 或实际上几乎任何语言中字符的所有句法含义),以及像,这样{}的长字符串被用作假的额外字符。!==**=

所以问题是 - 编程语言是否应该继续将自己限制在 ASCII 上,还是终于到了拥抱整个 Unicode 的时候了?一个有趣的中间地带是像 Fira Code 这样的连字字体- 源代码仍然会说!==,但在编辑器中你会看到≢。

目录
相关文章
|
6月前
|
程序员 编译器 Linux
V 语言
V 是一门通用的编程语言,也可以作为系统语言,其网站说它非常简单,你可以在一个周末学会,它还说 Go 程序员会对该语言非常熟悉,因为 V 语言在很多方面借鉴了 Go。
102 2
|
1月前
|
网络协议 数据挖掘 编译器
C++语言
C++语言
20 3
|
存储 算法 Unix
用一句Halle认识C 语言
用一句Halle认识C 语言
114 0
用一句Halle认识C 语言
|
SQL 关系型数据库 MySQL
msq语言
控制语言,定义语言,操纵语言
271 0
|
算法 Linux 程序员
我为什么建议大家一定的会 C 语言
我为什么建议大家一定的会 C 语言
2078 0
|
JavaScript 开发工具 前端开发
|
Web App开发 Java C#
|
Java API C#
七天七语言
七天七语言 Kotlin Go C# Java Scala Python JavaSript hello,world 基本数据类型与类型系统 关键字与操作符 循环与分支 字符串与数组 集合类 面向对象编程 函数式编程 文件IO 正则表达式 多线程 J...
1034 0