Dictionary 试图制定一个计划

Dictionary 试图制定一个计划,dictionary,scheme,mutability,Dictionary,Scheme,Mutability,正在尝试制作一个名为make odd mapper的方案过程!它应该是一个过程,接受一个输入,一个过程,并产生一个过程作为输出 例: (定义i4(mlist 10 2 30 4)) (i4) {10 2 30 4} ((创建奇数映射器!添加一个)i4) i4 {11 2 31 4} 我知道这个问题需要改变输入列表和设置mcar!void是其中的一部分……有人能给我一些合理的代码来解决这个问题吗?如果有人想知道突变,并用它来创建一个过程,使一个过程成为它的输出,它将是有用的。好吧,简单地说,所提出

正在尝试制作一个名为make odd mapper的方案过程!它应该是一个过程,接受一个输入,一个过程,并产生一个过程作为输出

例:

(定义i4(mlist 10 2 30 4))

(i4)

{10 2 30 4}

((创建奇数映射器!添加一个)i4)

i4

{11 2 31 4}


我知道这个问题需要改变输入列表和设置mcar!void是其中的一部分……有人能给我一些合理的代码来解决这个问题吗?如果有人想知道突变,并用它来创建一个过程,使一个过程成为它的输出,它将是有用的。好吧,简单地说,所提出的问题是不可能的。原因是,如果可能的话,你可以有一个表达式:

(make-odd-mapper! add-one)
这将是一个函数的函数,由部分应用程序创建。但是,此函数必须修改其操作数,这只能由宏完成。因此,该函数的结果将是一个宏,这是不可能的,因为宏不作为值存在。但是,通过对
的定义稍加修改,就可以生成奇数映射器可以做一些稍微不同的事情。在这种情况下,你会像在原来的问题中一样使用它,除了这个,而不是说

((make-odd-mapper! add-one) i4)
你会说

(make-odd-mapper! add-one i4)
下面是这样做的代码:

;;; Applies its argument to every other element of a list.
(define map-every-other
  (lambda (function lis)
    (let map-every-other ((function function) (lis lis) (acc '()) (other #t))
      (if (null? lis)
      acc
      (map-every-other
       function
       (cdr lis)
       (append acc (list (if other (function (car lis)) (car lis))))
       (not other))))))

;;; This function does the odd mapping, but returns
;;; the new function instead of mutating the original.
(define make-odd-mapper
  (lambda (function-to-apply)
    (lambda (function)
      (lambda ()
        (map-every-other function-to-apply (function))))))

;;; This macro mutates the original function by using make-odd-mapper
(define-syntax make-odd-mapper!
  (syntax-rules ()
    ((_ function-to-apply function)
     (begin
       (set! function
         ((make-odd-mapper function-to-apply) function))))))

为什么每个问题都用不同的昵称?也许你应该先读一读。