Surprise Language Round #7用的语言是false,有关这门语言的资料可以在这场比赛的Announcement里找到链接。false的神奇之处在于它的编译器(解释器?)大小仅有数K,代价就是这门语言用起来蛋疼无比,写代码就像是在开垦荒地一样,什么都要自己写……好不容易把这场比赛8个题全都做完,于是决定写一个通关指南,来纪念这个挺有意思的语言。
读入整数
用false写hello world无比轻松,于是你就想写一个A+B……然而,false并不支持读入整数,只支持读入一个字符……但这显然难不倒会写读入优化的我。
|
|
如何写函数
写到这里,觉得有必要分享一下用false写一个函数的方法。我认为需要保证的一点原则是不要改动参数。false程序基于堆栈,这就需要时刻对当前栈中有哪些元素保持了解,尤其是它并不支持交换任意两个元素,保持栈中元素有序便显得尤为重要。我一般在写一个函数时,会将它的参数列表写在草稿纸上,例如读入整数的函数:
|
|
这便完成一个完整的循环。
如何写循环
其实false写循环很容易,但我一开始以为变量不能多次赋值,就把迭代器直接扔到栈里面去了,每次都要算好久……其实只要像一般程序一样开个变量叫i,每次+1之类的就行了……
有关数组
false的文档里提供了一个嵌入汇编的方法来使用数组,但是cf提供的解释器好像不支持……但是false有一个神奇的函数(功能?)叫做ø(在cf的解释器里它被替换成了大写O),作用是把栈中第x个元素复制出来,那么栈就基本上可以当做数组用了,只不过它不支持修改元素……还有一种实现数组的方法是直接用26个字母来当数组的每一位(当然只适用于数组元素很少的情况),然后……写个程序生成一下你的false代码……如果数组大小不满26的话可以在对应的变量中放入-1之类的占位符。