lisp中的嵌套列表

时间:2012-05-20 18:16:45

标签: list lisp

我有一个练习来获得一个嵌套列表,并用一个“有趣”的单词替换每个单词。我们得到了一个什么是“有趣”字的声明。

我写了这段代码

(defun funny_nestes (nested_l)
  (cond ((null nested_l) "")
        ((atom (car nested_l))
         (cons (funnyw (car nested_l))
               (funny_nestes (cdr nested_l))))
        (t (cons (funny_nestes (car nested_l))
                 (funny_nestes (cdr nested_l))))))

当'funnyw'是返回“有趣”字样的函数时。

如果我跑

(FUNNY_NESTES '(ata (she lamadta be JCT) oved be NDS))

我得到了

("AbATAbA " ("SHEbE " "LAbAMAbADTAbA " "BEbE " "JCT " . "")
 "ObOVEbED " "BEbE " "NDS " . "")

我希望得到

(AbATAb (SHEbE LAbAMAbADTAbA  BEbE  JCT) ObOVEbED  BEbE  NDS )

我该如何解决?我怎么能用lambda做到这一点?

2 个答案:

答案 0 :(得分:0)

'我怎么能用lambda做到这一点?'什么意思'做lambda'?

为什么代码中有空字符串?

如果您想要符号而不是字符串,则需要将字符串转换为符号。

答案 1 :(得分:0)

我会在黑暗中捅,假设这是被问到的:

(defun replace-with-gibberish (modifier words)
  (cond
    ((null words) nil)
    ((consp (car words))
     (cons (replace-with-gibberish modifier (car words))
           (replace-with-gibberish modifier (cdr words))))
    (t (cons (funcall modifier (car words))
             (replace-with-gibberish modifier (cdr words))))))

(replace-with-gibberish
 #'(lambda (x)
     (intern
      (coerce
       (mapcan #'list
               (coerce (symbol-name x) 'list)
               (coerce
                (make-string
                 (length (symbol-name x))
                 :initial-element #\b) 'list)) 'string)))
 '(ata (she lamadta be JCT) oved be NDS))

我可以从您显示的结果中推断出来。但是,你应该知道如果你想摆脱符号周围的管道 - 你需要使用大写字母为符号生成乱码。 (默认情况下,符号名称为大写,如果需要包含小写字母,则需要对其进行转义)。

你的问题的问题在于你基本上得到了你发布的功能,但你没有发布的功能似乎是错误的(搞笑)。我继续前进,并假设你想用任何函数替换它 - 这就是为什么这个例子。