Краткая схема R5RS определяет структуру или класс с несколькими полями

Мне удалось определить структуру с одним полем, как определить несколько полей в одной структуре или классе?

Я новичок в R5RS, я могу придумать только проблемный код, пожалуйста, рассматривайте его как псевдокод, выражающий то, что я пытаюсь сделать.

(define recipe 
    (let (salt 5)
         (sauce "ketchup")))

or

(define recipe
   '((let salt 5)
     (let sauce "ketchup")))

Каков наиболее краткий и распространенный способ сделать это?


person user3352539    schedule 17.11.2014    source источник


Ответы (1)


Большинство реализаций Scheme предоставляют записи через SRFI 9. Итак, в вашем случае вы можете определить тип записи recipe следующим образом:

(define-record-type <recipe>
  (recipe salt sauce)
  recipe?
  (salt recipe-salt)
  (sauce recipe-sauce))

Затем вы можете использовать его следующим образом:

> (define salty-ketchup (recipe 5 "ketchup"))
> (recipe-salt salty-ketchup)
5
> (recipe-sauce salty-ketchup)
"ketchup"

Если вы используете Racket, существует еще более простой синтаксис для определения структур.

(struct recipe (salt sauce))
person Chris Jester-Young    schedule 17.11.2014