0

これは、システム管理者のポジションのインタビューから来ています。

テスト中に、私はクッキーを発見しました。これには、base64でエンコードされたメッセージが含まれ、次にuuencodeされ、次は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 です。もう少し詳しく知り、将来のインタビューに備えたい場合は、Casting Spells in 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、ネストされた list からにアクセスするコードを記述する必要があります((1 2 (3 4 5) 6) 7 8 (9 10))

Common Lisp Hyperspec は、アクセサ 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 に答える