0

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

我写了这段代码

(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" 单词的函数时。

如果我跑

(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 做呢?

4

2 回答 2

0

“我怎么能用 lambda 做呢?” “用 lambda 做”是什么意思?

为什么你的代码中有一个空字符串?

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

于 2012-05-20T19:06:15.543 回答
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))

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

您的问题的问题是您基本上得到了正确发布的功能,但您没有发布的功能似乎是错误的(funnyw)。我继续假设您只想用任何函数替换它 - 这就是示例的原因。

于 2012-05-20T20:40:33.153 回答