2012-09-20 160 views
0

這來自系統管理員位置的採訪。Lisp代碼 - 如何運行此示例

在測試過程中,我發現了一個cookie。它包含一條以base64編碼的消息,接下來是uuencoded,接下來是bzip,最後是gzip。 所有解壓後,它包含以下代碼:

(let* ((x '((1 2 (3 4 5) 6) 7 8 (9 10)))) 
    ;; use car/caaa..r/cd..r here to get 4 from x 
) 

我認爲這是Lisp的。我現在試圖找出這是應該做的。
我不知道Lisp,所以任何人都可以幫忙嗎?

+0

什麼*是*你的問題? –

+1

我可以幫忙 - 是的,它是Lisp(或Scheme或Clojure)。 – duffymo

+1

這是來自職位調查的問題。這不是程序員的工作。這是爲系統管理員。任務在cookie中,接下來我是base64編碼,接下來是uuencoded,接下來是bzip,最後是gzip。我得到了這個lisp代碼。我不是程序員:(我認爲我對所有這些編碼做了很好的工作,但Lisp?:):( – RJS

回答

3

一個非常簡單的(也許是最容易理解的)代碼:

(car (cdr (car (cdr (cdr (car x)))))) 

(汽車L)讓你列表

(CDR L)的第一個元素給你列表中的其餘元素l(在列表中)

逐個嘗試每個呼叫以查看發生了什麼。

確實是Lisp。如果您想了解更多信息併爲將來的訪談做好準備,您可以試試Casting Spells in Lisp教程。

+0

謝謝你的解釋 – RJS

2
(let* ((x '((1 2 (3 4 5) 6) 7 8 (9 10)))) 

; use car/caaa..r/cd..r here to get 4 from x 

) 

所以,你應該寫的代碼,從嵌套列表((1 2 (3 4 5) 6) 7 8 (9 10))訪問4

Common Lisp Hyperspec爲您提供了可用的存取器函數:Accessor CAR, CDR, ...

> (CADR (CADDAR '((1 2 (3 4 5) 6) 7 8 (9 10)))) 
4 

因此,代碼爲:

(let* ((x '((1 2 (3 4 5) 6) 7 8 (9 10)))) 
    (cadr (caddar x))) 
+0

謝謝你的迴應:) – RJS