15.1.1 從符號組合出動畫
除其他外,lisp 語言以其簡單但功能強大的語法聞名。當寫任何複雜的程式時,你總是最終定義自己的基元,然後指定它們的意思。下面的示例演示如何能定義乙個簡單的動畫,使用 lisp 的語法。該**建立兩個移動的盤子:乙個綠色,直徑為 50 ,乙個小一點,紅色, 直徑 20。綠色的圍繞點 (0,0)以 100 畫素的半徑旋轉,紅色在兩個指定點之間移動:
(compose
(disc 50 green (rotating 0 0 100))
(disc 20 red (linear -100 0 100 0))
)在 lisp,一切既可以是符號,也可以是列表。在前面的**段中,所有的識別符號(例如,compose 或 red),以及數字常量都是符號。列表使用括號建立,所以,** (rotating 0 0 100 2) 構造乙個包含五種元素的列表,其中的每乙個都是符號。列表可以由基元符號組成,也可以包含巢狀的列表。在我們示例的頂層,由符號 compose 和兩個巢狀的列表組成。
如果我們看一下出現在**段中的符號,我們可以確定幾個基元。例如,disc 用於建立乙個可見的形狀,而我們有兩個基元 (rotating 和 linear)來指定基元形狀的運動。然後,我們有乙個符號 compose,從其他形狀構建乙個動畫物件。這就是基元組合操作的示例:我們可以用與使用其他形狀完全相同的方式,使用這個結果。我們可以指定整個組合動畫的運動,就像操作為單個形狀一樣容易。
從語法的角度看,前面的示例建立了包含乙個符號和其他兩個列表的列表,因此,很自然會問,我們如何指定**實際的意義呢。
題目1511 從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到 1時代表鍊錶輸入完畢。1本身不屬於鍊錶。輸出 對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節...
題目1511 從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到 1時代表鍊錶輸入完畢。1本身不屬於鍊錶。輸出 對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節...
九度oj 1511 從尾到頭列印鍊錶
時間限制 1 秒 記憶體限制 128 兆 特殊判題 否 提交 6494 解決 1964 題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到 1時代...