как получить доступ к значению внутри вложенной структуры - PullRequest
0 голосов
/ 16 октября 2018

У меня возникли проблемы, как получить доступ к определению внутри структуры внутри структуры?

(define-struct health (maximum current))
;; A Health is a (make-health Nat Nat)
;; Requires:
;;    current <= maximum

(define-struct weapon (strike-damage durability))
;; A Weapon is a (make-weapon Nat Health)
;; Requires:
;;    strike-damage > 0

;; The Hero's rupee-total field is the total balance of rupees
;; (i.e., the in-game currency) possessed by the Hero
(define-struct hero (sword life rupee-total))
;; A Hero is a (make-hero Weapon Health Nat)

(define damaged-broadsword (make-weapon 5 (make-health 10 5)))

(define (total-damage sword)
  (* (weapon-strike-damage sword) (weapon-durability sword)))

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

1 Ответ

0 голосов
/ 17 октября 2018

Вы делаете это путем вложения аксессоров:

(define (total-damage sword)
  (* (weapon-strike-damage sword)
     (health-current (weapon-durability sword))))

Возможно, более читабельно:

(define (total-damage sword)
  (let* ((dmg (weapon-strike-damage sword)) ;; get damage value of sword
         (h   (weapon-durability sword))    ;; get sword's health-struct 
         (c   (health-current h)))          ;; get current health out of 
    (* dmg c)))                             ;; the health struct and calculate

;; so from your example:
(total-damage damaged-broadsword)
;; 25
...