公務人員特種考試計算機大意110 年第 23 題單選題
Scheme 語言是屬於 LISP 串列式語言之一,若函式 getLast 定義為取出串列最後的元素;getTheRest 定義為取出串列除第一個元素外的剩餘元素;若 List = {2, 0, 1, 2, 0, 1, 0, 7},試問(getLast(getTheRest(getTheRest List )))輸出為何?
B正確答案
getTheRest 去頭、getLast 取尾;兩次去頭不影響最後元素,最終仍取串列最後一個 7。
為什麼答案是 B
getTheRest 只去掉第一個元素,執行兩次後串列變為 {1,2,0,1,0,7},再用 getLast 取尾端即為 7。
載入中…
完整詳解
Pro · 無限重點 getTheRest 去頭、getLast 取尾;兩次去頭不影響最後元素,最終仍取串列最後一個 7。
看外層是 getLast → 不管中間 getTheRest 幾次,只要沒動到尾端,答案就是串列最後一個元素 7。
逐選項分析
A✕
2 是原串列的第一個元素,會被 getTheRest 去掉,且 getLast 取的是尾端,與首元素無關。
B✓ 正確
getTheRest 只去掉第一個元素,執行兩次後串列變為 {1,2,0,1,0,7},再用 getLast 取尾端即為 7。
C✕ 陷阱
0 在串列中出現多次,易誤以為倒數第二個 0 是答案,但 getLast 取的是最後一個元素 7,不是 0。
D✕
1 雖多次出現,但非串列尾端元素,getLast 只回傳最後一個,不是中間的 1。
Scheme 串列運算逐步拆解
| 步驟 | 運算 | 結果串列 | 說明 |
|---|
| 0 | 原始 List | {2,0,1,2,0,1,0,7} | 初始串列 |
| 1 | getTheRest List | {0,1,2,0,1,0,7} | 去掉首元素 2 |
| 2 | getTheRest (上一步) | {1,2,0,1,0,7} | 再去掉首元素 0 |
| 3 | getLast (上一步) | 7 | 取尾端元素 |
考生容易把 getTheRest 誤解為「取剩下一個」或「去掉最後一個」,但它其實是 Scheme 的 cdr──只去掉第一個元素。外層再套 getLast 時,尾端 7 自始至終沒被動過,這是本題關鍵。