【问题标题】:list procedure in SchemeScheme中的list过程
【发布时间】:2013-05-01 17:27:45
【问题描述】:

我现在正在准备考试,但我不确定我是否理解 Scheme 中的list 程序。我知道它可以用来创建像(define x (list 'a 'b 'c)) 这样的列表变量。但是我在过程创建中看到了它的另一种用法:

1 ]=> (define foo3
           (lambda (b lst)
                (if b
                    (car lst)
                    (cadr lst)
                )
           )
      )
;Value: foo3

1 ]=> (foo3 #f ’(a b))
;Value: b

1 ]=> ((foo3 #t (list cdr car)) ’(a b c))
;Value: (b c)

(list cdr car) 是什么意思? (我知道cdr 和car 在引用列表中的第一个和其余部分方面是什么意思)

【问题讨论】:

    标签: functional-programming scheme


    【解决方案1】:

    在代码中,(list cdr car) 只是一个过程列表。 foo3 将根据传递的参数b 从该列表中选择一个过程。在第二个例子中,这个 sn-p:

    (foo3 #t (list cdr car))
    

    ...将返回cdr,因为第一个参数是#t,所以最后我们只是评估这个:

    (cdr '(a b c))
    => '(b c)
    

    【讨论】:

    • 哦,我明白了。我仍然认为列表基本上是 C 中的数组的方式。我认为我们不能在其中存储过程。非常感谢。
    • 是的,这是函数式编程语言的优点之一:过程就像任何其他数据类型一样,您可以将它们作为参数传递,从其他过程返回,将它们存储在数据结构中等。
    • 不管怎样,您也可以将函数存储在 C 数组中,但这并不常见,因为 C 的函数创建起来非常麻烦。
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多