схема определяет список как локальную переменную - PullRequest
1 голос
/ 28 апреля 2019

Моя цель - определить список как локальную переменную, чтобы получить из нее элемент max. Мой код:

#lang racket
(define (f a b c)
    (list (+ (* a a) (* b b) (* c c)) (+ a c))
    (define (max-of-list-2 lst)
      (foldr max (first lst) (rest lst)))
  (max max_from_list 12))
(f 5 6 7)

Во втором ряду я определил список с вычисленными значениями. Моя цель состоит в том, чтобы передать его в следующую строку, чтобы получить от него максимальное число, и, наконец, получить максимальное из максимального числа списка и 12. Что я делаю неправильно. Как с этим справиться?

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Вы можете использовать несколько define s в верхней части вашей функции.

Итак, вы имели в виду

(define (f a b c)
  (define lst (list (+ (* a a) (* b b) (* c c)) 
                    (+ a c)))
  (define (max-of-list-2 lst)
      (foldr max (first lst) (rest lst)))
  (max (max-of-list-2 lst) 12))

но это просто эквивалент

(define (f a b c)
  (foldr max 12 (list (+ (* a a) (* b b) (* c c)) 
                      (+ a c))))
0 голосов
/ 28 апреля 2019

Трудно понять ваши намерения, но это лучшее понимание, которое я могу придумать -

(define (max a b)
  (if (< a b)
      b
      a))

(define (f a . more)
  (if (empty? more)
      (max a 12)
      (max a (apply f more))))

(f 5 6 7)
; => 12

(f 5 20 30)
; => 30
0 голосов
/ 28 апреля 2019

Вам нужно использовать внутреннее определение, например:

(define (f a b c)
    (define max_from_list (list (+ (* a a) (* b b) (* c c)) (+ a c)))
    (define (max-of-list-2 lst)
      (foldr max (first lst) (rest lst)))
  (max max_from_list 12))
...