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

170 lines
2.6 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=============
基本函數介紹
=============
四則運算
=============
.. 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 保存前文變數。