zoukankan      html  css  js  c++  java
  • 【Scheme】cons的过程性实现

    (define (cons x y)
      (define (dispatch m)
        (cond ((= m 0) x)
              ((= m 1) y)))
      dispatch)
    
    (define (car z) (z 0))
    (define (cdr z) (z 1))
    

    (cons x y)实际返回的是一个过程,即内部定义的dispatch,它接收一个参数0或1分别返回x和y。因此,如果z是由(cons x y)产生的过程,(z 0)相当于把0传递给dispatch,就会得到x。(z 1)同理得到y。


    (define (cons x y)
      (lambda (m) (m x y)))
    
    (define (car x)
      (x (lambda (m n) m )))
    
    (define (cdr x)
      (x (lambda (m n) n )))
    

    (cons x y)返回一个lambda函数,此函数接收一个过程,并作用于x,y上。那么car和cdr的实现就应该是实现一个过程,该过程接收2个参数,并分别返回第一个和第二个参数。
    以car为例,(lambda (m n) m)该函数将两个参数中的第一个返回,
    再将其传递给x,相当于调用了((lambda (m n) m ) x y),自然返回了x。

  • 相关阅读:
    sqlalchemy 使用pymysql连接mysql 1366错误
    mysql之数据导出
    Go常见语句
    huffman code
    后缀数组,目前比较赶进度,而且有点难,所以放到以后再来看
    hash
    bipartite matching
    spanning tree
    拓扑排序
    Union Find
  • 原文地址:https://www.cnblogs.com/cknightx/p/6795490.html
Copyright © 2011-2022 走看看