Mercurial > repo
diff interps/linguine/README @ 996:859f9b4339e6
<Gregor> tar xf egobot.tar.xz
author | HackBot |
---|---|
date | Sun, 09 Dec 2012 19:30:08 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/interps/linguine/README Sun Dec 09 19:30:08 2012 +0000 @@ -0,0 +1,214 @@ +Linguine programming language +by Jeffry Johnston (linguine@kidsquid.com) +November 23, 2005 + + +Introduction +------------ +Linguine is designed as a successor to Spaghetti. The word linguine means +flattened pasta or spaghetti. True to this definition, Linguine programs +are much shorter and flatter compared to their long and skinny Spaghetti +ancestors. However, both languages share the yummy feature that program +lines may be arranged in any arbitrary order. Linguine adds multiple +pointers and unlimited storage and cell sizes for Turing completeness (and +that extra full quality). The command set is similar to Spaghetti, +although AND has been replaced by the more capable (and delectable) NAND, +and there is an additional integer output command. Try some Linguine to +satisfy your saucy esoteric appetite... mmm carbs! + + +Syntax +------ +The program line format is: + +line[command]jump + +Each part is required, so there must be a line, left bracket, at least one +command, a right bracket, and a jump. Line is a unique line number for +this program line. Jump is the line number to jump to if all commands +on this line have completed without jumping. Line and jump are integer +values. Integers may be positive or negative and have no upper or lower +bounds. However, line may not be 0, as this line number is reserved for +jumping to line 0 to exit the program. There may be multiple commands per +program line, separated by commas. Valid commands are: + +Command Meaning +------- ------- +x=y Assignment (x=y) +x+y Addition (x=x+y) +x-y Subtraction (x=x-y) +x|y NAND (x=x NAND y) +x>y Bit shift (x=x>>y if y is positive, else x=x<<y) +x? Input (x=input), returns -1 on EOF +x$ Character output (output character x) +x# Integer output (output integer x) +x<y:ifjump Less than (if x<y then jump to ifjump) +x~y:ifjump Equal to (if x==y then jump to ifjump) +x^ Time (x=Number of seconds since the epoch) + +x, y, and ifjump are integers. The x, y, and ifjump values may be +dereferenced by preceding them with the `*' character. Multiple +dereferences may be done by prepending additional `*' characters. + +If there are multiple commands on a line, each is executed in turn, left +to right, unless an ifjump occurs. + + +Memory +------ +The memory tape indices extend without limit in both the positive and +negative directions. Each memory cell may store any integer value. All +cells initially hold a value of 0. + + +Dereference +----------- +The x and y values work slightly differently (by default x is an address +and y is a plain value). Take the following example commands: + +10=20 + +So x is 10 and y is 20. That means that cell 10 is assigned the value 20. + +10=*20 + +That command assigns the value in cell 20 to cell 10. + +*10=20 + +Now, the value 20 won't be assigned to cell 10, it will instead be +assigned to the cell index given in (pointed to by) cell 10. + +*10=*20 + +Finally, the value in cell 20 is assigned to the cell pointed to by cell +10. + + +Code comments +------------- +Linguine programs may include line comments with the ' (apostrophe) +character. Everything on the line after the comment character will be +ignored. + + +Line numbers and Jumps +---------------------- +Every non-blank line (excluding comments) must have a leading line number. +Program execution will start at the lowest specified line number. Line +numbers may be negative. + +Every non-blank line must also specify the line that will next be jumped +to. Jumping to line 0 exits the program. + +Jump and ifjump values may be dereferenced in a manner exactly as the y +value. A runtime error will be generated if a dereferenced jump line +number is not defined in the program, even if that line would not be +branched to by the instruction. + + +History +------- +November 23, 2005 Started +November 24, 2005 Released +November 25, 2005 Amended to include jump dereferencing. This + change does not affect existing programs, although + some may be more simple now. + + +Examples +-------- +'Hello World in Linguine +'Programmed by Jeffry Johnston, 2005 +1[0=72,0$,0+29,0$,0+7,0$,0$,0+3,0$,1=32,1$,0-24,0$,0+24,0$,0+3,0$,0-6,0$,0-8,0$,1+1,1$,1-23,1$]0 + + +'Cat program in Linguine +'Programmed by Jeffry Johnston, 2005 +1[0?,0$,0~10:0]1 + + +'Fibonacci sequence calculator in Linguine +'Programmed by Jeffry Johnston, 2005 +1[0=32,2=1,1#,0$,2#]2 +2[1+*2,3=*1,1=*2,2=*3,0$,2#]2 + + +'99 bottles of beer in Linguine +'Programmed by Jeffry Johnston, 2005 +1[0=99,2=32,3=10,4=44,5=46]2 +2[1=0]8 +3[4$,3$,1=1]8 +4[5$,3$,6=84,6$,6+13,6$,6+10,6$,6-6,6$,2$,6+10,6$,6-1,6$,6-9,6$,2$]5 +5[6-1,6$,6+11,6$,6+8,6$,6-9,6$,4$,2$,6+2,6$,6-15,6$,6+18,6$,6$,2$]6 +6[6-10,6$,6+11,6$,2$,6-19,6$,6+17,6$,6-3,6$,6+6,6$,6-7,6$,6-10,6$,4$,3$]7 +7[0-1,1=2]8 +8[0~0:9,0#]10 +9[6=78,6$,6+33,6$]10 +10[2$,6=98,6$,6+13,6$,6+5,6$,6$,6-8,6$,6-7,6$,0~1:11,6+14,6$]11 +11[2$,6=111,6$,6-9,6$,2$,6-4,6$,6+3,6$,6$,6+13,6$,1~0:12,1~1:4]12 +12[2$,6-3,6$,6-1,6$,2$,6+6,6$,6-12,6$,6-3,6$,2$]13 +13[6+18,6$,6-22,6$,6+11,6$,6$,1~0:3,5$,3$,0~0:0,3$]2 + + +'Digital root calculator in Linguine +'Programmed by Jeffry Johnston, 2005 +1[1?,1~10:3,0+*1,0-49,0<9:2,0-9]2 +2[0+1]1 +3[0#,1$]0 + + +'ROT13 in Linguine +'Programmed by Jeffry Johnston, 2005 +1[-2?,-2~10:3,-2<65:2,-2<91:5,-2<97:2,-2<123:6]2 +2[*-1=*-2,-1+1]1 +3[*-3~0:4,*-3$,-3+1]3 +4[-2$]0 +5[-2+13,-2<91:2,-2-26]2 +6[-2+13,-2<123:2,-2-26]2 + + +'BF interpreter in Linguine (Turing completeness proof by implementation) +'Programmed by Jeffry Johnston, 2005 +1[*-2?,*-2~33:2,-2+1]1 +2[*-2=-1,-2+1]3 +3[-3=**-1,-3~-1:0,-3~43:4,-3~44:6,-3~45:7,-3~46:9,-3~60:10,-3~62:11,-3~91:12,-3~93:14]15 +4[*-2+1,*-2~256:5]15 '+ +5[*-2=0]15 +6[*-2?,*-2~-1:5]15 ', +7[*-2-1,*-2~-1:8]15 '- +8[*-2=255]15 +9[*-2$]15 '. +10[-2-1]15 '< +11[-2+1]15 '> +12[*-2~0:13]15 '[ +13[-3=1]16 +14[-3=-1]16 '] +15[-1+1]3 +16[-4=1]17 +17[-1+*-3,*-1~91:18,*-1~93:19]20 +18[-4+*-3]20 +19[-4-*-3]20 +20[-4~0:21]17 +21[-3~1:15]3 + + +'pi calculator in Linguine +'Programmed by Jeffry Johnston, 2005 +1[0=1,1=0,2=1,3=1,4=46]2 +2[5=*0,5+*0,5+*0,-2=*5,-2+*1,-3=*2,-1=3]16 +3[6=*-2,-2=*5,-2+*0,-2+*1,-1=4]16 +4[6~*-2:8,-3=*3,-3+*3,-3+1,-2=*2,-1=5]14 +5[2=*-2,1+*0,1+*0,-2=*1,-1=6]14 +6[1=*-2,-2=*0,-3=*3,-1=7]14 +7[0=*-2,3+1]2 +8[6#,4~46:9]10 +9[4$,4=0]10 +10[-2=*0,-3=10,-1=11]14 +11[0=*-2,-2=*2,-3=*6,-1=12]14 +12[1-*-2,-2=*1,-3=10,-1=13]14 +13[1=*-2]2 +14[-4=*-3,-5=*-2,-2=0]15 +15[-4~0:*-1,-2+*-5,-4-1]15 +16[-4=*-2,-2=0]17 +17[-4<*-3:*-1,-4-*-3,-2+1]17