Scheme语言 入门语法
Scheme簡(jiǎn)介
Scheme是1970年代著名的函數(shù)式編程語(yǔ)言。是Lisp(LISt Processing)語(yǔ)言的一門變式。大多數(shù)人想到Scheme首先是其獨(dú)特的語(yǔ)法,因?yàn)槠洳捎们熬Y表示法和嵌套括號(hào),并且具有一流的函數(shù)和優(yōu)化的尾遞歸的特征,在當(dāng)時(shí)屬于較為新穎的特征。
表達(dá) Expression
原子表達(dá)式 Atomic Expression
就像和Python一樣,Scheme原子表達(dá)式或者說(shuō)基本表達(dá)式只要一個(gè)簡(jiǎn)單的步驟來(lái)評(píng)估。表達(dá)式包括數(shù)字,布爾型,符號(hào)。
scm> 1234 ; integer 1234 scm> 123.4 ; real number 123.4符號(hào) Symbols
符號(hào)的作用像Python中的name,但是也不完全是。準(zhǔn)確來(lái)說(shuō),Scheme中的symbol是一種值的類型。
scm> quotient ; A name bound to a built-in procedure #[quotient] scm> 'quotient ; An expression that evaluates to a symbol quotient scm> 'hello-world! hello-world! Booleans布爾型 Booleans
在Scheme中,除了#f這一特殊布爾值以外的所有值都解釋為True值,即真值,不像Python,0也被認(rèn)為是False值。
scm> #t #t scm> #f #f調(diào)用表達(dá)式 Call Expression
與Python中一樣,Scheme調(diào)用表達(dá)式中的運(yùn)算符位于所有的操作數(shù)之前。但是與Python不同的事,運(yùn)算符在括號(hào)內(nèi),并且操作數(shù)使用空格分隔,而不用逗號(hào)分隔。但是,對(duì)于Scheme調(diào)用表達(dá)式的求值遵循與Python完全相同的規(guī)則。
特殊形式
特殊形式表達(dá)式的運(yùn)算符是特殊形式。特殊形式之所以“特殊”的原因是它們不遵循上一節(jié)中所述的三個(gè)評(píng)估規(guī)則。相反,每種特殊形式都遵循其自己的特殊執(zhí)行規(guī)則,例如在評(píng)估所有操作數(shù)之前的短路。
以下的一些特殊形式有,if,cond,defined和lambda形式。
控制結(jié)構(gòu) Control Structures
if 表達(dá)式
if特殊形式使我們可以基于預(yù)估值來(lái)評(píng)估兩個(gè)表達(dá)式之一。if表達(dá)式必須有兩個(gè)必需的參數(shù)和一個(gè)可選的第三個(gè)參數(shù)。
(if <predicate> <if-true> [if-false])第一個(gè)操作數(shù)是Scheme中的條件或者說(shuō)預(yù)估值(predicate),這個(gè)表達(dá)式將被解釋為#t或者#f,即真或者假。
評(píng)估if特殊形式的表達(dá)式的規(guī)則如下:
讓我們來(lái)對(duì)比一下Scheme中的if表達(dá)式與Python中的if聲明:
Scheme
Python
if x > 3: ... 1 ... else: ... 2Cond表達(dá)式
使用嵌套的if表達(dá)式似乎不是一種處理多條件情況較為實(shí)用的方法。我們可以實(shí)用cond特殊形式,這是一種通用條件表達(dá)式,類似于Python中的多子句if/elif/else條件表達(dá)式。
cond可以接受任意數(shù)量的字句作為參數(shù)。子句寫(xiě)為包含兩個(gè)表達(dá)式的列表:(<p> <e>)。
每個(gè)子句中的第一個(gè)表達(dá)式是預(yù)估值(predicate),子句中的第二個(gè)表達(dá)式是與其預(yù)估值相對(duì)應(yīng)的返回表達(dá)式,可選的else子句沒(méi)有預(yù)估值。
評(píng)估規(guī)則如下:
總結(jié)
以上是生活随笔為你收集整理的Scheme语言 入门语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android5.1开机LOGO与开机动
- 下一篇: p3369跳表代替平衡树