【问题标题】:Write scheme LISP Atomic_Count [closed]编写方案 LISP Atomic_Count [关闭]
【发布时间】:2014-12-18 04:21:00
【问题描述】:

有人可以帮我解决这个问题吗?

  • (define test1 '(c o 2 (h 2 o) 3 o 2))
  • (定义 test2 '(h 2 o))
  • (定义 test3 '(c o 2 o 2))
  • (atomic_count test1) 返回 14
  • (atomic_count test2) 返回 3
  • (atomic_count test3) 返回 5

【问题讨论】:

  • 拜托,你能说得更具体点吗?
  • 为什么会出现“(atomic_count test1) 返回14”的情况?如果你要数原子,我预计是 9。
  • @JoshuaTaylor 14 是正确的:1 + 1*2 + (1 * 2 + 1) * 3 + 1 * 2。
  • LOL.. LISP 中的原子不是列表。看来您正在使用原子一词作为分子的元素(例如化学而不是计算机编程)。您需要指定这些内容。此外,如果您想要代码作为答案,您必须提供到目前为止所做的工作。
  • @uselpa 啊,所以应该是“为符号加1,后跟非数字”和“为符号加数字,后跟数字。”

标签: racket


【解决方案1】:

不太难,重点是您需要某种缓冲区(在我的例子中称为prev)来等待可能的乘法:

(define (atomic_count lst)
  (let loop ((lst lst) (prev 0))
    (if (null? lst) 
        prev
        (let ((elt (car lst)))
          (cond
            ((list? elt)   (+ prev (loop (cdr lst) (loop elt 0))))
            ((number? elt) (loop (cdr lst) (* prev elt)))
            (else          (+ prev (loop (cdr lst) 1))))))))

测试:

> (atomic_count '(c o 2 (h 2 o) 3 o 2))
14
> (atomic_count '(h 2 o))
3
> (atomic_count '(c o 2 o 2))
5

【讨论】:

  • 非常感谢您对uselpa的帮助
  • 你很幸运,我比接近投票的人更快。下次请尝试表现出一些努力。
  • 好的,很抱歉,因为我是 lisp 方案的新手
猜你喜欢
  • 2015-08-05
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2010-10-02
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多