Sakana

Sakana (魚) means 'fish' in Japanese. It is an esoteric programming language created by User:TheCanon2. Sakana is chiefly a derivative of Deadfish, but it also takes ideas from brainfuck and ΙΧΘΥΣ.
Code written in Sakana can be represented as either ASCII (アスキー魚, ASCII-Sakana) or Japanese text (和魚, Wa-Sakana). This article will use the Wa-Sakana variant.
==Commands==
Like Deadfish, and like its predecessor Shinda Sakana, Sakana has a single accumulator, x. Unlike Deadfish and Shinda Sakana, Sakana has commands for handling input. Sakana has fourteen commands.
===Normal commands===
ASCII	Japanese	Term 	Action
i 	増 	増加 (zouka) 	Increment x
d 	減 	減少 (genshou) 	Decrement x
w 	空 	空にする (karanisuru) 	Set x to 0
z 	問 	質問 (shitsumon) 	Skip next instruction if x == 0
s 	乗 	二乗 (nijou) 	Square x
o 	出 	出力 (shutsuryoku) 	Output x as number
c 	書 	書く (kaku) 	Output x as Unicode
r 	読 	読む (yomu) 	Comma in brainfuck, but UTF-16
h 	停 	停止 (teishi) 	Halts the program
===Special commands===
ASCII 	Japanese	Term 	Action
p 	魚 	魚 (sakana) 	Comma in brainfuck, but replace itself with the character and interpret as Sakana
(Other characters)	(Symbol)	 	If first of (Symbol), start definition of function (Symbol), else execute function (Symbol)
 	(Kana) 	 	Symbols.
m 	作 	作る (tsukuru) 	End definition of function (Symbol)
f 	繰 	繰り返す (kurikaesu) 	Within definition of function (Symbol), repeat function (Symbol)
b 	壊 	壊す (kowasu) 	Within definition of function (Symbol), stop execution of function (Symbol)
# 	＃ 	 	Start/end comment
When creating a definition, (Symbol) and 作 behave as open and close parentheses. A function can only be defined if it has its own 作 that is not shared with a larger function. Function definitions do not execute, definitions can only be called from elsewhere in the program. Undefined functions are ignored by the Sakana langauge.
魚 can be used as the beginning of a definition if it is not a known function or command and is paired with a 作 (note that this is case specific to the user input).
The 魚 function works on the same internal counter as 読 i.e. the hypothetical code 魚読魚 means that the 1st and 3rd characters of a string are interpreted as program data but the 2nd character is interpreted as text.
Like in Deadfish, x is set to 0 if x == -1 or x == 256.
== Examples ==
Since no implementation currently exists, all of these programs were tested manually and thus may contain unnoticed syntax errors. Please write in the talk page if an implementation results in any inconsistencies.
===Kon'nichiwa sekai===
い増増増増増増増増増増作で減減減減減減減減減減作ひいいいいいいいいいい作
増増増乗増乗い増乗いいいいい書いいいいいい増増増増書でででで書で書い増増増増書
空い増乗いい乗ひい減書空い増増増乗増増増増乗ひ減
Outputs the text, "こんにちは世界". The い, で, and ひ functions are used to save space.
===Deadfish interpreter===
i増作d減作s乗作o出作コ魚繰作コ
Standard 'idso' variant. Defines the functions i, d, s, o, and the main loop コ. Then it executes コ and uses the 魚 function to grab program data from the user.
XKCD variant:
x増作k乗作c出作d減作コ魚繰作コ
===Truth machine===
0出停作1出繰作魚
===Cat===
ね読書問繰停作ね
===XKCD Random Number===
ラ空増増乗＃Chosen by fair dice roll.＃＃guarenteed to be random.＃作ラ出
Function ラ sets x to 4.
or as a program:
増増乗出
===Parity calculator===
ツ減減作
グ空増増増乗乗減減書空増増増乗増乗書書停作
キ空増増乗増増増増乗増増増増増書空増増増乗増増乗減減減書空増増増乗増乗増書増増増増増増増増増書停作
エ減問壊キ作オ問壊グ作サオエツ繰作読サ
Outputs the parity of a Unicode value. Functions グ and キ print 'Even' and 'Odd' respectively. Function サ is the main loop and is halted by functions エ and オ when the parity is found.
===Small interpreter===
お問壊魚作+増＃Adds 6 to check if x is equal to 250＃増増増増増増お減減減減減減作.書作チ魚作チ
This program interprets the minimalist language Small.
The お command takes advantage of the fact that position does matter, it will not execute + or . because they were defined after お was defined.
===Print all* of Unicode===
は減減減減減減減減作ユ書増問繰＃Print 257:＃増増乗乗増乗はははは繰作ユ
This program prints every Unicode character in order, except for Ā at U+0100.
===Print all* natural numbers===
は減減減減減減減減作イ出増問繰＃Print 257:＃増増乗乗増乗はははは繰作イ
Similar to the Print All* Of Unicode program, this program prints all natural numbers in order, except for 256.
Category:Languages
Category:Accumulator-based
Category:Unknown computational class
Category:Deadfish derivatives
Category:CJK
Category:Unimplemented
Category:2024