Eri*_*ver 7 lisp scheme racket
我只是在玩scheme/lisp,正在考虑如何正确地定义我自己的定义average.我不知道如何做一些我认为必需的事情.
有人有定义的例子average吗?我似乎不太了解LISP形成一个网络搜索,可以找回我正在寻找的结果.
Eli*_*lay 11
定义将是一个非常简单的单行,但不破坏它,你应该看看:
一个"rest"参数 - 它(define (foo . xs) ...xs...)定义foo为一个函数,它接受任意数量的参数,并且它们可以作为列表使用,它将是值xs.
length 返回列表的长度.
apply 获取函数和值列表,并将函数应用于这些值.
当你得到它,你可以去更多:
查看foldl函数以避免在可能非常大的列表上应用列表(这在参数列表的长度有限的某些实现中很重要,但在Racket中没有太大区别).
请注意,Racket具有确切的exact->inexact有效性,您可以使用它来制作更高效的浮点版本.
剧透者是:
(define (average . ns) (/ (apply + ns) (length ns)))
使它需要一个参数: (define (average n . ns) (/ (apply + n ns) (add1 (length ns))))
用途foldl:(define (average n . ns) (/ (foldl + 0 (cons n ns)) (add1 (length ns))))
使用浮点数: (define (average n . ns) (/ (foldl + 0.0 (cons n ns)) (add1 (length ns))))