free MP3s recorded of codesimian: fractalSound1.mp3 b.mp3 c.mp3 d.mp3 but its more fun to create your own...

Start CodeSimian NOW (applet)

limited by internet security,
not all parts of CodeSimian work here.
Requires Java 1.5 and 2 ghz CPU

Download CodeSimian NOW (JAR file)

or click SAVE then double-click CodeSimian.jar
Requires Java 1.5 and 2 ghz CPU


Unlike most other programming-languages,
CodeSimian has only 1 TYPE of thing: the CS,
which can be converted to many (and theoretically ANY) Java type(s),
therefore CodeSimian is simpler and can understand itself better.
The many SUB-TYPES are used interchangably.

Intro/Tutorial | SourceCode | FAQ? | ListOfCommands | ~~Sounds/Audio (generated by equations)~~ | PlayElectricGuitarWithTheMouse | FREE MP3s (play and modify them with CodeSimian) | Pictures | Javadoc/TechnicalDocuments | CompareToJava | Plans (what to build) | RootClass | 1 Type | SystemReq | Humans | DNA | Bugs/Flaws | Wiki | Def | my resumE (give me a programming job) | Contact

CodeSimian has only 1 TYPE of thing: the CS. Everything is a CS. Every CS can be converted to any of the other TYPEs by using the many functions inside For example, someCS.D() executes someCS then interprets its value as a double (D) number. someCS.setD(3.14) tries to set the value of someCS to the double number 3.14. But it also works to get the value of the CS as a JSlider:
JSlider js = (JSlider) someCS.L(JSlider.class);
The jslider starts at position 14% because 3.14 wraps around 0-1 to be 0.14 and has been specificly programmed to wrap around range 0-1. Types are turing-complete powerful.

someCS.PType(int index) and someCS.setPType(int index, CS newType) set the types that each CS should accept. The parameter newType or the returned CS of PType are both type-measurers, judges of other CSs.
Types are not enforced in most CSs. Specific CSs may enforce types. The function is there if you want to use it. Most CSs use the DEFAULT TYPE: Static.defaultType() which accepts everything.

CS judgeOfIndex3 = someCS.PType(3); //do these 3 lines if you want to obey TYPE restrictions
judgeOfIndex3.setP(0,iWantToBeInIndex3); //use first index (0) in judge
if(judgeOfIndex3.Z()) someCS.setP(3,iWantToBeInIndex3);

Beware: some CSs P functions check TYPES automatically even if you dont execute the above 3 lines. If the type doesnt match, the function will return false. Normally, those functions would only return false if there was no room to add a new CS or the index was outside valid range. Some CSs automatically enforce their types.

A list of types is below, each with a 1-letter abbreviation. All TYPEs (except S and N) are also functions in
Example: byte b = someCS.B();
Example codesimian code: =B(0#b someCS)
Example: Window x = (Window) new WindowCS().addP(new S("displayThisText")).L(Window.class);


V void, 0 bits. Execute but dont return anything.
Z boolean, 1 bit. Execute and return true or false.
B byte, 8 bits. Execute and return a byte...
C char, 16 bits
S short, 16 bits
I int, 32 bits
J long, 64 bits
F float, 32 bits
D double, 64 bits
L object or array[], many bits - quantity varies

THESE TYPES ARE ADDED BY CODESIMIAN. ANY CS CAN BE INTERPRETED AS ANY OF THESE TYPES. Examples: anyCS.L(Number.class) or anyCS.L(String.class), but use anyCS instead of anyCS.L(CS.class) because it may choose to cast to a different type of CS than itself is.

P CS or Parameter of a CS, one of many CSs within a CS. is the root type

[i havent yet decided which letter to use for this] Use each parameter CS as a char value, like in (optimized to be used as a STRING, subtype of CS)

N Number, any of the primitive types: Z B C S I L F D
but not V, or any of the subtypes of java.lang.Number, or any CS whose value can be easily set and retrieved as a number, example:

Privacy Policy