2014-12-16 3 views
0

В качестве домашней работы я получил следующее упражнение. Я сидел на нем в течение нескольких часов без каких-либо успехов, поэтому у меня нет выбора, кроме как использовать вашу помощь.Схема - с помощью применения

Примеры:

(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" 

ответ

1

Это должно сделать:

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

Спасибо! Мне также нужно написать функцию с именем «переопределить», которая принимает объект и свойство и переопределяет старое свойство объекта с новым. Если у объекта нет метода с именем нового свойства, то данное свойство является новым свойством вновь созданного объекта. Как редактировать объект в схеме? –

+0

, например: (определение myobj (создание-OBJ (список (против "а" (лямбда() 1)) (против "б" (лямбда (х) (+ х 2)))))) (define myobj (override myobj (cons "b" (lambda() 11)))) –

+0

@ user3451848 Пожалуйста, создайте новый вопрос для этого; вы всегда можете указать ссылку на эту ссылку. – uselpa

Смежные вопросы