【问题标题】:repeating elements in common lisp [closed]普通lisp中的重复元素[关闭]
【发布时间】:2012-11-18 16:25:05
【问题描述】:

我正在尝试使用two arguments x and y 创建一个函数,该函数创建一个list of y times repeated elements X,但我对如何执行此操作感到困惑,我认为列表压缩可以使用哪种或使用哪种方法,但我想要一个更短更简单的方法例如我希望我的简单代码是这样的

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

我该怎么做?书籍链接或任何可以给我线索的东西我尝试搜索但我并不幸运

【问题讨论】:

    标签: functional-programming lisp common-lisp


    【解决方案1】:

    您可以将make-listinitial-element 键一起使用:

    CL-USER> (make-list 10 :initial-element 8)
       (8 8 8 8 8 8 8 8 8 8)
    

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

    【讨论】:

    • 这应该是公认的答案
    【解决方案2】:

    试试这个,它在 Scheme 中,但总体思路应该很容易转换为 Common Lisp:

    (define (repeat x y)
      (if (zero? y)
          null
          (cons x
                (repeat x (sub1 y)))))
    

    编辑:

    现在,在 Common Lisp 中:

    (defun repeat (x y)
      (if (zerop y)
          nil
          (cons x
                (repeat x (1- y)))))
    

    【讨论】:

    • 如果if 的结果之一无论如何将是nil,那么否定条件并省略第二个(“else”)参数对我来说似乎更干净,它默认nil 如果未指定:(if (not (zerop y)) (cons x (repeat x (1- y))))
    • @MarkReed 我不喜欢独臂ifs。他们在球拍中被禁止是有充分理由的;)
    猜你喜欢
    • 2018-03-24
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多