蠢货别忘(一)common lisp funcall

时间:2021-07-26 17:03:23

自定义 cons,car,cdr

 

Scheme 示例:

(define (my_cons x y)

  (lambda (z) (z x y)))

(define (my_car m)

  (m (lambda (p q) p)))

(define (my_cdr m)

  (m (lambda (p q) p)))

 

Common Lisp:

(defun my_cons (x y)

  (lambda (z) (funcall z x y)))

(defun my_ca_dr (m flag)

  (funcall m (lambda (p q)

                     (cond ((= flag 0) p)

                               ((= flag 1) q)))))

(defun my_car (m) (my_ca_dr m 0))

(defun my_cdr (m) (my_ca_dr m 1))

 

提示:

Common Lisp使用函数作为变量后,调用该变量时需要使用 funcall,(funcall 函数名 参数列表)。