2012-09-20 121 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