【问题标题】:Lisp function to return a number double and then the same number doubled plus oneLisp 函数返回一个数字加倍,然后将相同的数字加倍加一
【发布时间】:2018-06-20 20:55:59
【问题描述】:

我对 lisp 完全陌生,不知道如何创建这个函数。 这是我为帮助我解决它而创建的伪代码

Binary tree children
; This function returns the children of binary tree node
; e.g., 3 -> (6,7)
; e.g., 11 -> (22,23) 
(defun tree-node(x))

这个函数是用来取一个数字,加倍,然后加1。请帮忙。

【问题讨论】:

  • 你应该付出一些努力。 Stackoverflow 并不是真正为您编写代码的地方。
  • 我明白,但我是 lisp 的新手
  • @NnachetaNnyagu 如果您对语言了解甚少以至于无法理解答案,那么可能不适合您。也许你应该read a book

标签: lisp common-lisp


【解决方案1】:

将数字加倍(此处存储在名为n 的变量中):(* 2 n)

要加一个:(1+ n)。请注意,1+ 是函数的 name。与(+ n 1)相同。

现在,假设您有一个范围(例如函数体),其中有一个名为 n 的变量。您现在使用let 创建一个新变量d

(let ((d (* n 2)))
  …)

这个新变量在let 的主体范围内(由上面的 表示)。

现在我们创建另一个变量d1,这是另外一个。我们现在需要使用let*,这样d的作用域就不仅仅是body,还有let*的绑定形式:

(let* ((d (* n 2))
       (d1 (+ d 1)))
  …)

该函数应该被称为child-indices:

(defun child-indices (n)
  (let* ((d (* n 2))
         (d1 (+ d 1)))
    …))

defunlet 等许多形式的主体是所谓的implicit progns,这意味着这些形式返回其主体中最后一个表达式的值。因此,无论我们在上面标记为 的地方放入什么形式,最后一个值(或多个值,但我们暂时搁置)就是函数的返回值。

有几种方法可以“返回这个然后那个”,但我们现在将使用一个列表:

(defun child-indices (n)
  (let* ((d (* n 2))
         (d1 (+ d 1)))
    (list d d1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多