【问题标题】:Scheme - using apply方案 - 使用 apply
【发布时间】:2014-12-16 21:21:38
【问题描述】:

我收到了以下练习作为家庭作业。我在上面坐了几个小时都没有成功,所以我别无选择,只能求助于你。

示例:

(define m1 (cons "fixNumber" (lambda () 42)))

(define m3 (cons "add" (lambda (x y) (+ x y))))

(define myobj (create-obj (list m1 m2 m3)))

(myobj "fixNumber" '()) ;; => 42

(myobj "add" '(1 2)) ;; => 3

(myobj "myMethod" '()) ;; => "Error: no such method" 

【问题讨论】:

    标签: function object scheme apply


    【解决方案1】:

    应该这样做:

    (define (create-obj mlist)
      (lambda (method parms)
        (let ((func (assoc method mlist)))
          (if func
              (apply (cdr func) parms)
              "Error: no such method"))))
    

    【讨论】:

    • 谢谢!我还必须编写一个名为“override”的函数,它接受一个对象和一个属性,并用新属性覆盖对象的旧属性。如果对象没有具有新属性名称的方法,则给定属性是新创建对象的新属性。如何在方案中编辑对象?
    • 例如: (define myobj (create-obj (list (cons "a" (lambda () 1)) (cons "b" (lambda (x) (+ x 2)))) )) (define myobj (override myobj (cons "b" (lambda () 11)))))
    • @user3451848 请为此创建一个新问题;您可以随时添加指向此链接的链接。
    猜你喜欢
    • 2022-01-25
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多