On this page:
1.1 Lisp and its parenthsis
1.2 Chineseoid characters
1.3 Character implications
8.12

1 Rationale🔗

ref to: http://www.yanying.wang/SOICOL

1.1 Lisp and its parenthsis🔗

Lisp, as an ancient programming language, when I was learning it with inherent ideas from modern programming languages such as Ruby, I noticed there are a few distinctions. Among them, The most prominent one is the form.

LISP is highly flat in forms, all are parenthesis. On the contrary, most modern PLs adhere to use different forms for different operations:

Operation

Ruby code

Racket code

number addition

1+2+3

(+ 1 2 3)

create array

[1, 2, 3]

(vector 1 2 3)

create hash

{a: 1, b: 2, c: 3}

(hash 'a 1 'b 2)

create array of a range of numbers

Array(1..5)

(build-list 5 values)

create array of duplication elements

Array.new(3, 1)

(make-list 3 1)

By the examples above, we can see in Ruby, different operations are wrote in distinctive forms, but in Racket they are in same form: elements in one parenthesis. This each other resembled form of LISP impedes people differentiate them on a glimpse, thus the meaning of operations are more blamed on the function names(first word of elements in parenthesis).

In conclusion, the function names of LISP take more responsibilities to annotate diverse operations than modern PLs. The more informations that function names shown to us, the better we can distinguish them and understand the purpose and usage of them.

1.2 Chineseoid characters🔗

Compare to English,the writing is based on the pronounciation of speaking, Chinese contrarily emphasize its writing more than speaking, which has actually developed a way to write related objects and concepts, we call it LiuShu(六书).

With the fact that chinese characters are just the implementation of using LiuShu for the communication of human, what I am doing here is using it to invent and design lots of chinese resembled characters(looks like chinese characters but can not be recognized by most Chinese people) for the concepts of Lisp and even the whole programming language world to make human interact better with it.

Ming code

Racket code

( 'a 'b)

(cons 'a 'b)

(􏿴 'a 'b 'c 'd)

(list 'a 'b 'c 'd)

(􏿝 '(1) '(2) '(3 4) '(5 6))

(append '(1) '(2) '(3 4) '(5 6))

(􏿜 '(1) '(2) '(3 4) '((5 6)))

(append* '(1) '(2) '(3 4) '((5 6)))

(􏼓 6 'foo)

(make-list 6 'foo)

(􏼎 10 )

(build-list 10 values)

( '(a b c d e c f) 'c)

(index-of '(a b c d e c f) 'c)

(􏼏 10)

(range 10)

(􏻿 'a 'b 'c 'd)

(vector 'a 'b 'c 'd)

(􏿰 'a 'b 'c 'd)

(hash 'a 'b 'c 'd)

As chart shown above, the keywords of Ming are much short in length, and in forms the complex characters are usually consituted by other simpler characters, and those simpler characters are usually used for related function names as well.

Further more, the connotations behind the characters work the same way, they are related to each other and complex concepts are broke to simple concepts.

And one more thing, the chineseoid characters implemented here also have the ability to imply to human about the arguments and results of functions, check Naming Rules for more.

1.3 Character implications🔗

Since the chineseoid chracters are much complicated than general western characters, there are few terminology we need to know in advance: radical, component, part(check the wiktionary page for details).

Simply put it, phrase is composed by more than one characters, character is composed by more than on parts. And additionally, an specific character may have which radical a component. In this condition, this at the same timeit additionally as its radical(which usually is another standalone and useful character at the same time), and the component of it implies an difference, such as the type of input or output.

Take example of the procedure , the character is composed of (component) and (radical). By the composition, we can deduce that this procedure has a similar usage as since it is the radical of . And the additionally means the output data is a list(read Naming Rules for more).