Lisp函数返回数字加倍,然后相同的数字加倍再加一

时间:2018-06-20 20:55:59

标签: lisp common-lisp

我对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。请帮助。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

现在,我们创建另一个变量d1。我们现在需要使用let*,以便d的范围不仅是正文,而且是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)))