Common Lisp Programming

时间:2014-04-25 01:21:18

标签: lisp

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

编写一个带有三个参数的Lisp函数:一个名为aList的整数列表,一个名为min的整数,以及一个名为max的整数。该函数返回aList中落在min< = x< = max范围内的元素数,其中x是aList的元素。如果aList为空,则该函数应返回0.

这是正确的做法。

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

2 个答案:

答案 0 :(得分:0)

  1. 安装sbcl
  2. 在REPL中输入您的代码并尝试
  3. 参考代码,用于查找aList中属于min< = x< = max:

    范围内的元素数量
    (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))
    

答案 1 :(得分:0)

我就是这样做的。

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

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

然后我总结一下。

不需要循环或递归。