方案将列表定义为局部变量

时间:2019-04-28 12:33:03

标签: functional-programming scheme max racket fold

我的目标是将list定义为局部变量,以便从中获取最大元素。我的代码:

#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 个答案:

答案 0 :(得分:1)

您可以在功能顶部使用几个 define

你的意思是

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

答案 1 :(得分:0)

您需要使用内部定义,如下所示:

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

答案 2 :(得分:0)

要确定您的意图有些困难,但这是我能想到的最好的理解-

(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