编写计算行
本页介绍每个计算块都离不开的基础知识:一行是如何被读取的,如何在算式旁边写备注,如何为值命名并重复使用,以及如何让一行的结果取决于某个条件。如果你刚开始在 Varlig 中做计算,请从这里读起;当某个名称或注释的表现与你预期的不同时,也可以回来查阅。
每行一个表达式
计算写在笔记中的计算块里。输入 ```calc 围栏,或者按下 ⌘Y 插入一个计算块。计算块中的每一行都是一个计算,答案显示在这一行旁边。
CNY 12.50 * 5 结果为 62.50 CNY45 min + 1 hour 20 min 结果为 2 hours 5 min1.5 litres in ml 结果为 1,500 mL空行和注释行没有答案,所以你可以把计算块排得疏朗一些,边写边解释。
Varlig 首先会把整行当作数学式来读取,包括 CNY 450 with 13% VAT 这样的日常短语。如果这样读不通,它会把不认识的词放到一边,所以 5 个苹果 + 3 个橙子 的结果仍然是 8。这对随手记一笔很方便,但描述性的文字可能会与某个短语或单位名称冲突,所以如果想说明一行的用途,请使用下文介绍的注释或标签。详情请参阅Varlig 如何读取短语。
注释
注释是计算器会忽略的文字。有三种写法:
| 形式 | 示例 | 被忽略的内容 |
|---|---|---|
| 井号注释 | 房租 * 12 # 每年 或 # 预算 |
从 # 到行尾的所有内容 |
| 斜杠注释 | 房租 * 12 // 每年 |
从 // 到行尾的所有内容 |
| 引号备注 | "澳白" CNY 28 * 5 |
一行中任意位置双引号内的所有内容 |
# 每周采购牛奶 = CNY 12.50面包 = CNY 15 // 酸种面包鸡蛋 = CNY 18.90 "散养"牛奶 + 面包 + 鸡蛋 # 不含其他东西 结果为 46.40 CNY以 # 开头的行从头到尾都是注释,很适合在计算块中用作小标题。
标签
标签是位于行首的几个词,后跟一个冒号和一个空格。它用来描述答案,但不参与计算:
房租 = CNY 4,500水电网 = CNY 380房租和水电网: 房租 + 水电网 结果为 4,880.00 CNY咖啡馆账单: CNY 36.50 + CNY 12 结果为 48.50 CNY标签可以使用字母(包括带重音符号的字母)、空格和下划线,但不能使用数字。
标签不会创建名称。写下 房租和水电网: 房租 + 水电网 之后,并不存在名为 房租和水电网 的值。如果想重复使用某个结果,请使用 =。另外,请避免在赋值语句前加标签:住房: 房租 = CNY 4,500 会显示金额,但 房租 不会被存储。
赋值
= 为一个值命名。这一行同时会显示这个值,方便你边写边核对。
价格 = CNY 850 结果为 850.00 CNY价格 + 20% 结果为 1,020.00 CNY如需更新已经定义过的名称,请使用 +=、-=、*= 或 /=:
度假基金 = CNY 4,000度假基金 += CNY 1,500 结果为 5,500.00 CNY度假基金 -= CNY 850 结果为 4,650.00 CNY份数 = 4份数 *= 3 结果为 12面粉 = 750 g面粉 /= 3 结果为 250 g如果等号右侧的计算出错,这个名称就会保存该错误,所有用到它的行都会显示同样的错误,直到你重新为这个名称赋值:
客人 = 0人均 = CNY 1,200 / 客人 结果为 Error: divide by zero人均 + CNY 50 结果为 Error: divide by zero名称
名称可以由多个词组成,可以包含带重音符号的字母、非拉丁字母、数字、下划线和表情符号:
澳白 = CNY 28澳白 * 5 结果为 140.00 CNYcrème brûlée = CNY 45crème brûlée * 2 结果为 90.00 CNY🍎 单价 = CNY 3.50🍎 单价 * 6 结果为 21.00 CNYQ1 销售额 = CNY 42,400Q2 销售额 = CNY 41,100Q1 销售额 + Q2 销售额 结果为 83,500.00 CNY卧室_宽度 = 3.2 m卧室_宽度 * 2 结果为 6.4 m名称可以包含 Varlig 在别处使用的词,比如 to、in 或 needed,也可以借用内置函数的名称,比如 floor。只要你把它当作值来使用,Varlig 读取的就是你定义的值:
time to work = 25 mintime to work * 10 结果为 250 minpaint needed = 12.44 Lpaint needed to 1 dp 结果为 12.4 Lfloor = 12 m²floor * 2 结果为 24 m²floor(3.7) 结果为 3如果后面跟着括号,比如 floor(3.7),这个函数仍会照常发挥作用。
名称甚至可以以表示数字的英文单词结尾,这样价格读起来就和菜单上写的一样:
table for four = CNY 680table for four / 4 结果为 170.00 CNY名称区分大小写:eggs 和 Eggs 是两个不同的值。
如果希望某个名称在每篇笔记中都能使用,比如你的时薪或某个税率,请把它添加到设置中的全局定义里,而不必在每篇笔记中重复定义。
与内置词语冲突的名称
你定义的名称优先于其他任何拼写相同的内容,比如单位、数字词或常量。不过,日常名称不会干扰你的数量。直接写在复数名称或单位前面的数字表示对该事物计数,写在 tip 或 tax 前面的百分比表示小费或税费,所以名为 hours、nights 或 tip 的值不会改变下面这些行:
时薪 = CNY 150 / hourhours = 7.5时薪 * 7.5 hours 结果为 1,125.00 CNYnights = 14CNY 480/night * 14 nights 结果为 6,720.00 CNYtip = $12.69$84.60 + 18% tip 结果为 $99.83把指针悬停在这个词上,就能看到 Varlig 采用了哪种读法。在 时薪 * 7.5 hours 上会显示“Counts hours here, not the variable hours = 7.5.”在一行中的其他位置,这个名称就是你的值,比如 split CNY 600 among people。
在少数情况下,你的定义确实会改变一行的含义:
- 单个字母总是表示你的值,所以定义
m = 3之后,2 m等于 6,而不是两米。 - 数字写在单数名称前面时表示相乘,所以定义
宽度 = 3之后,2 宽度等于 6。提示会建议写成2 * 宽度,让含义一目了然。 - 数字词和常量同样会被取代:定义
one = 7之后,one times two等于 14。
养成两个习惯,就能避免大多数意外:
- 不要单独使用单位符号作为名称,比如
m、s、h或in;也不要重复使用常量和数字词,比如pi、one或i。 - 尽量使用描述性的名称,比如
工作时长、日薪或跑步距离。
文档顺序
每一行都能看到在它上方定义的名称。名称还会延续到同一篇笔记中后面的计算块里,所以你可以一次设置好输入值,然后在页面下方继续使用。
价格 = CNY 200数量 = 3总价 = 价格 * 数量 结果为 600.00 CNY价格 = CNY 250价格 * 数量 结果为 750.00 CNY总价 结果为 600.00 CNY重新定义 价格 不会改变前面的 总价 行:总价 是按照当时的价格算出来的。如需改变前面某个计算的结果,请编辑定义其输入值的那一行。
上一行的答案
prev 表示上方最近一行的答案;除非你把某个值命名为 ans,否则 ans 的含义与它相同。它们适合快速接着算一笔:
CNY 12,500 * 12 结果为 150,000.00 CNYprev / 52 结果为 2,884.62 CNYans + CNY 200 结果为 3,084.62 CNY要把一组行加起来,请在单独的一行中写上 sum 或 total。请参阅合计上方的行。
重置作用域
只包含 --- 的一行会开始一个新的作用域。在它上方定义的名称、自定义单位和自定义函数,在它下方都不再可见。想在一篇笔记中比较两种方案、又不想让它们的值互相串用时,这会很有用。
# 方案 A:市中心的公寓房租 = CNY 6,500通勤 = CNY 200房租 + 通勤 结果为 6,700.00 CNY---# 方案 B:离市区较远的公寓房租 = CNY 4,800通勤 = CNY 600房租 + 通勤 结果为 5,400.00 CNY在 --- 下方,必须重新定义 通勤。如果忘了定义,用到它的那一行就没有可以引用的值。
条件
if … then … else … 根据比较结果在两个值中选择一个。你可以单独使用它,也可以把结果赋给一个名称:
购物车 = CNY 79配送费 = if 购物车 >= CNY 99 then CNY 0 else CNY 8 结果为 8.00 CNY购物车 + 配送费 结果为 87.00 CNY如果有两种以上的结果,可以串联 else if:
购物车 = CNY 79if 购物车 < CNY 49 then CNY 12 else if 购物车 < CNY 99 then CNY 6 else CNY 0 结果为 6.00 CNY只有被选中的分支才会计算,所以另一个分支中即使有会出错的内容也没关系:
客人 = 0if 客人 > 0 then CNY 1,200 / 客人 else CNY 0 结果为 0.00 CNY后置 if 和 unless
你也可以把条件放在值的后面。value if condition 会在条件成立时显示这个值,value unless condition 则在条件不成立时显示它。其他情况下,这一行都不显示任何内容。
购物车 = CNY 79CNY 8 if 购物车 < CNY 99 结果为 8.00 CNYCNY 8 unless 购物车 >= CNY 99 结果为 8.00 CNY在条件中赋值
两个分支可以为同一个名称赋值:
购物车 = CNY 79if 购物车 >= CNY 99 then 运费 = CNY 0 else 运费 = CNY 8 结果为 8.00 CNY运费 结果为 8.00 CNY如果只有 then 分支,赋值会在条件成立时进行,否则这个名称保留原来的值:
购物车 = CNY 79积分 = 0if 购物车 > CNY 50 then 积分 = 50 结果为 50积分 结果为 50>= 等比较运算符以及 && 和 || 运算符,请参阅运算符、比较与条件。
综合运用
下面是一张小小的自由职业发票,写法和你在笔记中记录时差不多:
# 3 月发票日薪 = CNY 1,500工作天数 = 6差旅费 = CNY 386.40 // 火车票服务费 = 日薪 * 工作天数 结果为 9,000.00 CNY小计 = 服务费 + 差旅费 结果为 9,386.40 CNY一般纳税人 = true增值税 = if 一般纳税人 then 小计 * 6% else CNY 0 结果为 563.18 CNY应付总额: 小计 + 增值税 结果为 9,949.58 CNY每个输入值都有名称,所以下个月你只需修改 工作天数 和 差旅费,发票的其余部分就会随之更新。注释和标签让计算块清晰易读,而条件语句则让这篇笔记无论是否需要收取增值税都能适用。