Kitanai

== Kitanai is an interpreted esoteric language. ==
=== The original interpreter is made with C++. ===
(By the way, Kitanai means "dirty" in Japanese (Obviously refering to the language's syntax))
=== Full language Syntax : ===
* ( : Begin Instruction Bloc
 Usage : (Any code goes here)
* ) : Stop Instruction Bloc
* [ : Begin Memory Access
 Usage : [Any code goes here]
* ] : Stop Memory Access
* ? : Condition
 Usage : ?(condition code)(code executed if condition code returns anything except 0)(code executed if condition code returns 0).
* $ : AccessMemoryPosition
 Usage : $"position" OR $366 
 Description : "position" is the name of the "variable" you want to access and "366" is the sub-case of your variable).
* : : CurrentStackPosition
 Usage : :
 Description : Return the current position of the stack as a string.
* ; : CurrentSubStackPosition
 Usage : ;
 Description : Return the current sub-position of the stack as a number.
* < : StackLeft
 Usage : <
 Description : Decrease the sub-position of the stack.
* > : StackRight
 Usage : >
 Description : Increase the sub-position of the stack.
* ^ : StackSize
 Usage : ^
 Description : Returns the current stack size.
* @ : CurrentMemoryValue
 Usage : @ 
 Description : Returns the current value pointed in the Memory.
* # : Flag
 Usage : #
 Description : Creates a new flag.
* + : FlagCount
 Usage : +
 Description : Returns the flag count as a number.
* & : Goto
 Usage : &(x)
 Description : Jump to the (x) flag (Where x is the number of the flag).
* * : GotoNoOrigin
 Usage : *(x)
 Description : Jump to the (x) flag (Where x is the number of the flag) without adding the origin to the pile.
* ~ : Origin
 Usage : &~
 Description : Jump to the DynamicFlag created just after the previous Goto.
* ! : ToggleExecution
 Usage : !
 Description : Pause code execution until encountering a new ToggleExecution.
* % : End
 Usage : %
 Description : Ends the program.
=== Standard Library ===
Here are the available functions :
* add (string) (string) :
 Description : Returns the concatenation of the two strings given as parameters.
* add (number) (number) :
 Description : Returns the sum of the two numbers given as parameters.
* sub (number) (number) :
 Description : Returns the subtraction of the two numbers given as parameters.
* mul (number) (number) :
 Description : Returns the multiplication of the two numbers given as parameters.
* div (number) (number) :
 Description : Returns the division of the two numbers given as parameters.
* eq (string) (string) :
 Description : Returns the Number(1) is the two strings are equal else it returns Number(0).
* eq (number) (number) :
 Description : Returns the Number(1) is the two numbers are equal else it returns Number(0).
* neq (string) (string) :
 Description : Returns the Number(0) is the two strings are equal else it returns Number(1).
* neq (number) (number) :
 Description : Returns the Number(0) is the two numbers are equal else it returns Number(1).
* gt (string) (string) :
 Description : Returns the Number(1) is the first string has a greater length than the second string else it returns Number(0).
* gt (number) (number) :
 Description : Returns the Number(1) is the first number is greater than the second one else it returns Number(0).
* ge (string) (string) :
 Description : Returns the Number(1) is the first string has a greater or equivalent length than the second string else it returns Number(0).
* ge (number) (number) :
 Description : Returns the Number(1) is the first number is greater or equal than the second one else it returns Number(0).
* lt (string) (string) :
 Description : Returns the Number(1) is the second string has a greater length than the first string else it returns Number(0).
* lt (number) (number) :
 Returns the Number(1) is the second number is greater than the first one else it returns Number(0).
* le (string) (string) :
 Description : Returns the Number(1) is the second string has a greater or equivalent length than the first string else it returns Number(0).
* le (number) (number) :
 Returns the Number(1) is the second number is greater or equal than the first one else it returns Number(0).
* print (string) :
 Description : Prints the (string).
* println (string) :
 Description : Prints the (string) and appends a newline.
* printerr (string) :
 Description : Prints the (string) in stderr.
* input (string) :
 Description : Returns the string entered by the user and displays the (string) as a prompt.
* string (string) :
 Description : Does nothing.
* string (number) :
 Description : Converts an int to a string.
* int (string) :
 Description : Converts a string to an int.
* int (number) :
 Description : Does nothing.
* random () :
 Description : Returns a random Number from 0 to 1.
* time ()
 Description : Returns the current epoch time
* split (string target, string value, string delimiter)
 Description : Splits the string "value" with the delimiter "delimiter" and place the result in the stack "target".
* func (string function_name, int arg_count, instruction code)
 Description : Creates a new function named "function_name" with "arg_count" arguments that will execute "code" instruction
 You can retrieve arguments in the "args" stack.
* substr (string) (number) (number) :
 Description : Returns the substring of (string) between the first and the second number.
* bsfe (string) :
 Description : Returns the (string) encoded with base64. (Base Sixty Four = bsf)
* bsfd (string) :
 Description : Returns the (string) decoded with base64 (Base Sixty Four = bsf)
=== Examples ===
* Hello World
(All of the following versions works)
print "Hello, world!"
print("Hello, world!")
print"Hello, world!"
["Hello, world!"] print @
["Hello, world!"] print(@)
["Hello, world!"]print@
* Cat
print(input(""))
* Fibonacci
$0[int(input "Fib : ")]
$1[1]$2[1]
#
 $3[$1@]
 $1[$2@]
 $2[add @ ($3@)]
 $0[sub @ 1]
?(neq ($0@) 1) (&1)
print($1@)
* 99 bottles of beer
$"quant"[99]
#
 ?(gt @ 1) (
 print((add(add(add (string @) " bottles of beer on the wall, ")(string @)) " bottles of beer."))
 ?(gt @ 2) (
 $"suffix"[add (string(sub ($"quant"@) 1)) " bottles of beer on the wall."]
 ) (
 $"suffix"["1 bottle of beer on the wall."]
 )
 ) (
 ?(eq ($"quant"@) 1) (
 print "1 bottle of beer on the wall, 1 bottle of beer."
 $"suffix"["no more beer on the wall!"]
 )
 )
 print (add "Take one down, pass it around, " ($"suffix"@))
 print ""
 $"quant"[sub @ 1]
 ?(neq @ 0) (&1)
%
* Compact Deadfish Interpreter :
$0[0]#$1[input">> "]?(add(eq($0@)256)
(eq($0@)-1))([0])?(eq($1@)"i")($0[add@1])?
(eq($1@)"d")($0[sub@1])?(eq($1@)"o")
(print($0@))?(eq($1@)"s")($0[mul@@])&1
* Clean Deadfish Interpreter :
$"accumulator"[0]
#
 $"userInput"[input">> "]
 ?(eq ($"accumulator" @) 256)
 ($"accumulator"[0])
 ?(eq ($"accumulator" @) -1)
 ($"accumulator"[0])
 ?(eq ($"userInput" @) "i")
 ($"accumulator"[add @ 1])
 ?(eq ($"userInput" @) "d")
 ($"accumulator"[sub @ 1])
 ?(eq ($"userInput" @) "o")
 (print($"accumulator" @))
 ?(eq ($"userInput" @) "s")
 ($"accumulator"[mul @ @])
&1
* Compact More or Less Game
println(bsfd"QmllbnZlbnVlIHN1ciBsZSBqZXUgZHUgcGx1cyBvdSBtb2lucw==")
$"s"[int(mul random 100)]$"t"[6]$"f"[0]#$"i"[int(input(add(add
(bsfd"RW50cmV6IHVuIG5vbWJyZSAo")($"t"@))(bsfd"IGVzc2FpcykgOiA=")$"i"))]
&2?(eq($"t"@)0)(&3)?(eq($"f"@)1)(&4)&1#?(eq($"s"@)($"i"@))($"f"[1]&~
)($"t"[sub@1]?(gt($"s"@)($"i"@))(println(bsfd"Qydlc3QgcGx1cyAh"))(
println(bsfd"Qydlc3QgbW9pbnMgIQ=="))&~)#println(bsfd"TG9vc2Vy")%#
println(add(add(bsfd"V2lubmVyIGVuIA==")(sub 6($"t"@)))(bsfd"IGVzc2Fpcw=="))%
* Clean More or less Game
print "Bienvenue sur le jeu du plus ou moins"
$"secretNumber" [int(mul random 100)]
$"try" [6]
$"numberFound" [0]
#
 $"userInput" [int(input(add(add "Entrez un nombre (" ($"try"@)) " essais) : "$"userInput"))]
 &2
 ?(eq ($"try"@) 0) (
 &3
 )
 ?(eq ($"numberFound"@) 1) (
 &4
 )
 &1
#
 ?(eq ($"secretNumber"@) ($"userInput"@)) (
 $"numberFound" [1]
 &~
 ) (
 $"try" [sub @ 1]
 ?(gt ($"secretNumber"@) ($"userInput"@)) (
 print "C'est plus !"
 ) (
 print "C'est moins !"
 )
 &~
 )
#
 print "Looser"
 %
#
 print(add(add "Winner en " (sub 6 ($"try"@))) " essais")
%
* Function definition
func "sum" 2 (
 $"args"
 add($0@)($1@)
)
== External resources ==
* GitHub repository
Category:Languages
Category:2016
Category:Implemented