0

这是来自系统管理员职位的面试。

在测试过程中,我发现了一个 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一无所知,所以有人可以帮忙吗?

4

2 回答 2

3

一个非常简单(也许是最容易理解)的代码:

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

(car l)给你列表l的第一个元素

(cdr l)为您提供列表l的剩余元素(在列表本身中)

分别尝试每个呼叫以查看发生了什么。

它确实是 Lisp。如果您想了解更多信息并为未来的面试做好更好的准备,您可以尝试在 Lisp教程中施法。

于 2012-09-20T10:18:54.457 回答
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

)

因此,您应该编写代码以4从嵌套列表中访问((1 2 (3 4 5) 6) 7 8 (9 10))

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)))
于 2012-09-20T14:20:57.937 回答