方案函数生成器
Scheme Function Maker
我一直在 Scheme(特别是 Pretty Big)中处理这个过程,但遇到了困难。我想要做的是创建一个可以创建其他过程或函数的过程。在大多数情况下,我认为我在正确的轨道上。
(define (function-maker function-specs)
(let* [(specs (map cdr function-specs))
(name (caar specs))
(args (cadr function-specs))
(body (cdr(cdr function-specs)))]
(eval(list 'define name
(list 'lambda args body)))))
当前输出:
以上是当前输出,我将尽我所知解释发生了什么。输入本质上接受三个参数。一个名称,用于命名函数。函数的参数,最后是函数的主体。
然后将三个参数列在一起,然后它应该创建一个新函数。上图显示了我遇到的错误。感谢您的帮助!
要查看发生了什么,删除 eval
并检查列表:
(define (function-maker function-specs)
(let* [(specs (map cdr function-specs))
(name (caar specs))
(args (cadr function-specs))
(body (cdr(cdr function-specs)))]
(list 'define name
(list 'lambda args body))))
> (function-maker '((name: add5) (x) (+ x 5)))
'(define add5 (lambda (x) ((+ x 5))))
如您所见,正文中的括号太多,因此您正试图将结果数字用作过程。
你想要
(body (car (cdr (cdr function-specs))))
或
(body (caddr function-specs))
我一直在 Scheme(特别是 Pretty Big)中处理这个过程,但遇到了困难。我想要做的是创建一个可以创建其他过程或函数的过程。在大多数情况下,我认为我在正确的轨道上。
(define (function-maker function-specs)
(let* [(specs (map cdr function-specs))
(name (caar specs))
(args (cadr function-specs))
(body (cdr(cdr function-specs)))]
(eval(list 'define name
(list 'lambda args body)))))
当前输出:
以上是当前输出,我将尽我所知解释发生了什么。输入本质上接受三个参数。一个名称,用于命名函数。函数的参数,最后是函数的主体。
然后将三个参数列在一起,然后它应该创建一个新函数。上图显示了我遇到的错误。感谢您的帮助!
要查看发生了什么,删除 eval
并检查列表:
(define (function-maker function-specs)
(let* [(specs (map cdr function-specs))
(name (caar specs))
(args (cadr function-specs))
(body (cdr(cdr function-specs)))]
(list 'define name
(list 'lambda args body))))
> (function-maker '((name: add5) (x) (+ x 5)))
'(define add5 (lambda (x) ((+ x 5))))
如您所见,正文中的括号太多,因此您正试图将结果数字用作过程。
你想要
(body (car (cdr (cdr function-specs))))
或
(body (caddr function-specs))