打开/关闭搜索
搜索
打开/关闭菜单
65
32
5
2690
导航
首页
总览
沙盒页
备忘页
最近更改
随机页面
上传文件
打开/关闭外观设置菜单
无法加载偏好设置。请检查您的网络连接并重试。
重试
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
查看“︁Richard Markup v4 帮助文档”︁的源代码
来自 LNN的:not(博客)?
分享此页面
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
Richard Markup v4 帮助文档
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于这些用户组的用户执行:
用户
、导入者
您可以查看和复制此页面的源代码。
{{Setlang}}{{不完整}}{{Info|Richard Markup从未实际实现过。}} Richard Markup是我设计的一门带逻辑和流程控制的文本标记语言。在v4的语法中,行首加<code>|</code>的是文本,不加的是逻辑,与[[Richard Markup v3 帮助文档|v3]]正相反。 == 基本语法 == 文件的开头是'''头部信息''',记录了文件格式的版本: <pre><?richard-markup v4?></pre> 随后是若干个“语句”。以<code>|</code>开头的语句是'''文本''',运行时会直接输出它的内容,如: <pre>|Hello, world!</pre> 不加<code>|</code>的行是'''块状逻辑''',解释器会对它进行运算: <pre>print 1 + 2</pre> <code>print</code>语句会输出后面的内容。 还有一种'''行内逻辑''',可以写在文本里: <pre>|1 + 2 = {print 1+2}</pre> 这样会输出: <pre>1 + 2 = 3</pre> 在行内逻辑里的<code>print</code>不会自动添加换行符,类似Python 3中给<code>print()</code>传了参数<code>end=""</code>。不过每一行“文本”的末尾会自动换行。 另一种语句是'''函数定义'''。函数可以写成这样: <pre>def main: |Hello, world!</pre> 这是一个'''块状函数''',在函数名后用''冒号''表示内容开始。与Python类似,Richard Markup v3使用缩进来表示代码块。 此外,还有一种'''行内函数''',它只能有一行文本,写成这样: <pre>def an_inline_function {|Hello, world!}</pre> 函数没有'''参数'''时可以省略函数名后的括号。关于参数的使用后文会讲到。 可以用<code>#</code>来表示'''注释''',不过不能写在一行文本的末尾。 <pre>|Lorem ipsum dolor sit amet. |这个不是注释:#Hashtag # 一条没有用的注释 def foo: # 注释 # 还是没有用的注释 print 114514 # 臭块状逻辑 def bar {|sth} # 这里也可以注释</pre> 为了方便讲解,后文中的例子会省略头部信息。 == 字面量 变量 == 可以使用数字、布尔值、字符串、列表等字面量,写法与Python中一致: <pre>print 1 print 1.25 print True print False print None print "Hello, world!" print '"Hello"' print [1, 2, 3]</pre> 以上程序输出: <pre>1 1.25 True False None Hello, world! "Hello" [1, 2, 3]</pre> 仍然与Python类似,我们可以创建变量: <pre>a = 114514 a += 1919810 print a</pre> 没有<code>global</code>语句;名称以<code>$</code>开头的变量都是全局变量。 <pre>def foo: $bar = 3 baz = 4 $bar = 1 baz = 2 foo() print $bar # 输出:3 print baz # 输出:2</pre> == 文本字面量 == 有时我们还需要在逻辑中引用文本。文本和字符串是不同的,因为文本里面可以嵌入逻辑(禁止套娃!)。'''文本字面量'''用<code>{| ... }</code>表示(类似行内函数): <pre>def main: print {|Hello.} |Hello, {print {|Roy}}! print {|{print {|{print {|{print {|禁止套娃!}}}}}}}</pre> 输出: <pre>Hello. Hello, Roy! 禁止套娃!</pre> 直到文本被<code>print</code>时,它里面的逻辑才会执行。在这个例子中,文本被直接<code>print</code>出来了,<s>跟直接写没什么区别</s>。一般的用法是把文本赋值给变量,或作为参数传递。 <pre>a = {|Richard的XP系统是[数据删除]!} print a print a print a |重要的事情说三遍(迫真</pre> == 运算符 == Richard Markup v4中的运算符有(运算顺序由先到后): # 索引和函数调用――<code>a[b]</code>、<code>a(...)</code>,左结合 # 乘方――<code>a**b</code>,右结合 # 正负――<code>+a</code>、<code>-a</code>,右结合 # 乘除――<code>a * b</code>、<code>a / b</code>、<code>a // b</code>、<code>a % b</code>,左结合 # 加减――<code>a + b</code>、<code>a - b</code>,左结合 # 比较――<code>a == b</code>、<code>a < b</code>、<code>a <= b</code>、<code>a > b</code>、<code>a >= b</code>、<code>a != b</code>,无结合律 # 逻辑非――<code>not a</code>,右结合 # 逻辑与――<code>a and b</code>,左结合 # 逻辑或――<code>a or b</code>,左结合 # 赋值――<code>a = b</code>、<code>a += b</code>、<code>a -= b</code>、<code>a *= b</code>、<code>a /= b</code>、<code>a //= b</code>、<code>a %= b</code>、<code>a **= b</code>,右结合 # 逗号——<code>a, b</code>,左结合 除赋值和逗号外,这些运算符的用法都与Python相同,因此像<code>1 < x < 2</code>这样的连续比较运算是可以使用的。 赋值操作在Python中不是运算符,但在这里是。逗号运算<code>a, b</code>永远返回<code>b</code>,但<code>a</code>也会运行。因此可以: <pre>a = 1, b = 2</pre> 这样就相当于: <pre>a = 1 b = 2</pre> 但如果像Python那样写 <pre>a, b = 1, 2</pre> 效果会变成: <pre>a b = 1 2</pre> 赋值运算的返回值是修改后的值,因此我们可以: <pre>a = b = 1</pre> 也就是 <pre>a = (b = 1)</pre> 这样相当于: <pre>b = 1 a = b</pre> 不过,赋值运算的左手边依然只能是单个变量,不能是表达式。 == 函数参数 == 函数参数的写法与Python基本相同,只是没有参数的函数定义可以省略括号。 <pre>def function_with_parameter(param): # ...</pre> 通过给参数指定默认值可以把它变成一个可选参数,可选参数必需排在最后: <pre>def function_with_parameters(param1, param2="默认值"): # ...</pre> == 流程控制 == 在块状逻辑中,<code>if</code>――<code>elif</code>――<code>else</code>块这样表示: <pre>if condition: sth elif condition2: sth2 else: sth3</pre> 行内写法则是<code>{if condition|text|else text}</code>,没有<code>elif</code>了,不过可以在<code>else</code>里再套一个<code>if</code>。 也有<code>for</code>和<code>while</code>。<code>Range</code>函数的用法与Python里的<code>range</code>相同。 <pre>for i in Range(10): print i i = 1 while i <= 10000000: print i i *= 2 |{for i in Range(10)|{print i} }</pre> 一个FizzBuzz程序: <pre>for a in Range(1, 101): modThree = a % 3 modFive = a % 5 if modThree != 0 && modFive != 0: print a else: |{if modThree == 0|Fizz}{if modFive == 0|Buzz}</pre> == <code>~</code>特殊变量 == 通过给<code>~color</code>和<code>~bgcolor</code>赋值,可以更改颜色: <pre>~color="red", ~bgcolor="#114514" |Hello, world!</pre> 使用这种方法,颜色设置会对整个当前一层缩进(包括当前一层缩进中包含的子缩进)生效。还可以用<code>let</code>手动制造一层缩进,使设置只对里面的文本生效: <pre>|这行字是初始颜色 let ~color="red", ~bgcolor="white": |这行是白底红字 |这行又是初始颜色 let: ~color="red", ~bgcolor="white" |这样写也可以</pre> 如果需要用<code>if</code>决定不同颜色,建议创建一个临时变量来解决: <pre>if condition: _color="blue" else _color="red" ~color=_color</pre> 如果要对一行内的部分文字设置颜色,仍然可以用<code>let</code>: <pre>def main: |你好,我是{let ~color="#33bfab"|DGCK81LNN}。 |{let|{~color="#33bfab"}这样}也可以</pre> 或者让颜色对这一行的其余部分都生效: <pre>def main: |你好,{~color=white}世界! # “世界!”是白色</pre> 可用的特殊变量有: {|class=wikitable ! 属性 ! 含义 ! 可能的值 ! 默认值 |- | <code>~color</code> | 字体颜色 | 0到15的整数,或CSS颜色值字符串 | 空字符串 |- | <code>~bgcolor</code> | 文字背景高亮颜色 | 0到15的整数,或CSS颜色值字符串 | 空字符串 |- | <code>~delay</code> | 每显示一个字符后延时的毫秒数 | 自然数 | <code>45</code> |- | <code>~pause</code> | 每显示一行后延时的毫秒数 | 自然数或<code>None</code> | <code>None</code> |} <code>~pause</code>为<code>None</code>时,等待用户按任意键再继续。(也可以调用<code>Pause()</code>来手动等待按任意键。) 颜色为空或无法识别时,字体颜色默认为<code>7</code>,背景颜色默认为<code>0</code>。用整数表示颜色时依照: {|class=wikitable ! 值 ! 含义 ! 值 ! 含义 |- | <code>0</code> | <code>"#000000"</code> | <code>8</code> | <code>"#555555"</code> |- | <code>1</code> | <code>"#0000aa"</code> | <code>9</code> | <code>"#5555ff"</code> |- | <code>2</code> | <code>"#00aa00"</code> | <code>10</code> | <code>"#55ff55"</code> |- | <code>3</code> | <code>"#00aaaa"</code> | <code>11</code> | <code>"#55ffff"</code> |- | <code>4</code> | <code>"#aa0000"</code> | <code>12</code> | <code>"#ff5555"</code> |- | <code>5</code> | <code>"#aa00aa"</code> | <code>13</code> | <code>"#ff55ff"</code> |- | <code>6</code> | <code>"#aaaa00"</code> | <code>14</code> | <code>"#ffff55"</code> |- | <code>7</code> | <code>"#aaaaaa"</code> | <code>15</code> | <code>"#ffffff"</code> |} == 内建函数 == 为了避免命名冲突,考虑到Richard Markup没有“类”的概念(Python中类名一般以大写字母开头),内建函数都以大写字母开头。很多内建函数的用途与Python中的同名函数相同,但原理不同。 {|class=wikitable ! 函数名 ! 用途 |- | <code>Int</code> | 转换成数字并向下取整 |- | <code>Float</code> | 转换成数字 |} [[分类:存档]]
此页面嵌入的页面:
模板:Info
(
查看源代码
)
模板:MywikiParaHack
(
查看源代码
)
模板:Richard Markup
(
查看源代码
)
模板:不完整
(
查看源代码
)
返回
Richard Markup v4 帮助文档
。
查看“︁Richard Markup v4 帮助文档”︁的源代码
来自 LNN的:not(博客)?