【问题标题】:Common Lisp Programming通用 Lisp 编程
【发布时间】:2014-04-25 01:21:17
【问题描述】:

我是 lisp 语言的新手。只用了 3 天。 我有一个任务,我需要帮助来编写代码。

编写一个接受三个参数的 Lisp 函数:一个称为 aList 的整数列表、一个称为 min 的整数和一个称为 max 的整数。该函数返回 aList 中位于 min

这是正确的做法吗?

(defun countem(aList min max)
  (if (> min max) 
      (cons min (aList (add1 min) max))))

【问题讨论】:

  • 您指的是xy,但它们甚至都不存在。您只是从其他地方复制粘贴函数的主体吗?
  • 什么意思?这不是办法吗?
  • @user3571154 在你的 REPL 中尝试(+ 1 1)
  • 什么是 REPL?是否返回最小值和最大值之间的整数???
  • @user3571154 我敢打赌,您在课程中讨论的最新内容之一是使用car(或first)和cdr(或rest)拆分列表,以及递归列表。那将是一个很好的起点。 (提示:你根本不会使用cons。)

标签: lisp


【解决方案1】:
  1. 安装sbcl
  2. 在 REPL 中输入您的代码并试一试

查找 aList 中在 min

(defun countem-1 (aList min max)
       (let ((count 0))
         (dolist (el aList)
           (if (and (>= el min) (<= el max))
               (setf count (1+ count))))
         (print count)))

或者你的意思是递归方式:

(defvar count 0)
(defun countem-2 (aList min max)
       (if (<= min max)
           (progn
             (setf count (1+ count))
             (countem-2 aList (1+ min) max))
           (print count))

【讨论】:

    【解决方案2】:

    这就是我的想法。

    (defun countem (aList min max)
      (apply #'+ (mapcar (lambda (x) (if (<= min x max) 1 0)) aList)))
    

    我创建了一个 1 和 0 列表,通过在列表上映射一个匿名函数来判断元素是否满足约束。

    那我总结一下。

    不需要循环或递归。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多