archivesOfToyLang/tshunhue/docs/source/基本函數介紹.rst

171 lines
2.6 KiB
ReStructuredText
Raw Normal View History

2023-09-30 22:30:08 +08:00
=============
基本函數介紹
=============
四則運算
=============
.. function :: + : (-> int int int)
整數相加。
.. function :: - : (-> int int int)
整數相減。
.. function :: * : (-> int int int)
整數相乘。
.. function :: / : (-> int int int)
整數相除,得商數。除以 0 的時候跳出特例,中止程式。如果用 C 語言表示的話:
::
static jmp_buf buf;
...
void int_div_closure_thunk(Object* closure, Object* lhs, Object* rhs, Object* result){
if (lhs->value==0){
printf("Exception: Div 0 Error.");
longjmp(buf,1);
}
}
...
int main(void){
int jmpVal = setjmp(buf);
if (jmpVal == 0){
// main_body
}else{
// exit the program with the exception
printf("Exit the program with the exception");
}
}
.. function :: +. : (-> dou dou dou)
浮點數相加。
.. function :: -. : (-> dou dou dou)
浮點數相減。
.. function :: *. : (-> dou dou dou)
浮點數相乘。
.. function :: /. : (-> dou dou dou)
浮點數相除。
布爾值
============
.. function :: and : (-> bool bool bool)
AND。
.. function :: or : (-> bool bool bool)
OR。
.. function :: not : (-> bool bool)
NOT。
流程控制
============
.. function :: (if cond then alt)
若 cond 為真則返回 then否則返回 alt。
影印字元
=============
.. function :: print-str : (-> str void)
列印字串。``void`` 表示不返回任何東西。
字串操作
=============
.. function :: int-to-str : (-> int str)
整數轉成十進位字串10 為 base
.. function :: dou-to-str : (-> int str)
浮點數轉成十進位字串10 為 base
.. function :: str-concat : (-> str str str)
結合字串。
定義變數 (=)
=============
非函數
---------
語法如下:
::
(def Type var expression)
例如:
::
(def int a 10)
(def dou b (+ 3.1 7.0))
..note ::
因為 tshunhue 裡面,所有變數都是不可變物件, ``define`` 不可以拿來重新設定值。定義閉包也一樣。
函數(閉包)
---------------
.. _defining-lambda:
閉包的定義比較複雜。但大致如下:
::
(def Type var lambda-function)
例如:
::
(def (-> int int) int-add1 (\ ((int x)) (+ x 1)))
(def (-> dou dou dou) sqrt-sum (\ ((dou x)(dou y)) (+. (*. x x) (*. y y))))
匿名函數 (lambda function)
==============================
定義:
.. function :: (\\ () body+)
.. function :: (\\ ((Type var)) body+)
.. function :: (\\ ((Type1 var1)(Type2 var2)[...]*) body+)
所有函數都是第一類物件與閉包,用 lexical scope 保存前文變數。