Functional programming 公共lisp中的重复元素

Functional programming 公共lisp中的重复元素,functional-programming,lisp,common-lisp,Functional Programming,Lisp,Common Lisp,我试图创建一个带有两个参数x和y的函数,它创建了一个y乘以重复元素x的列表,但我不知道该怎么做,我认为列表压缩可以做到,但我想要一个更短、更简单的方法,例如,我希望我的简单代码是这样的 if y = 4 and x = 7 result is list of elements (7, 7, 7, 7) 我该怎么做?有什么想法吗??书籍链接或任何能给我提供线索的东西我尝试过搜索,但我并不幸运试试这个,它在计划中,但总体思路应该很容易翻译成Common Lisp: (define (repea

我试图创建一个带有
两个参数x和y
的函数,它创建了一个
y乘以重复元素x的列表,但我不知道该怎么做,我认为列表压缩可以做到,但我想要一个更短、更简单的方法,例如,我希望我的简单代码是这样的

if y = 4
 and x = 7
 result is list of elements (7, 7, 7, 7)

我该怎么做?有什么想法吗??书籍链接或任何能给我提供线索的东西我尝试过搜索,但我并不幸运

试试这个,它在计划中,但总体思路应该很容易翻译成Common Lisp:

(define (repeat x y)
  (if (zero? y)
      null
      (cons x
            (repeat x (sub1 y)))))
(defun repeat (x y)
  (if (zerop y)
      nil
      (cons x
            (repeat x (1- y)))))
编辑:

现在,在Common Lisp中:

(define (repeat x y)
  (if (zero? y)
      null
      (cons x
            (repeat x (sub1 y)))))
(defun repeat (x y)
  (if (zerop y)
      nil
      (cons x
            (repeat x (1- y)))))
可以与初始元素键一起使用:


Óscar answer提供了一个很好的例子,说明如何自己编写这样一个函数。

这应该是公认的答案如果
if
的结果之一将是
nil
无论如何,对我来说,否定条件并省去第二个(“else”)参数似乎更简单,如果未指定,则默认为
nil
(if(not(zeropy))(cons x(repeat x(1-y)))
@MarkReed我不喜欢单臂
if
s。有一个很好的理由禁止他们参加球拍比赛;)