【发布时间】:2021-06-17 20:44:44
【问题描述】:
我在这里问了几个关于 Scheme/SICP 的问题,答案经常涉及使用 apply 过程,我在 SICP 中没有见过,在本书的索引中,它只列出了一次,结果是一个脚注。
一些用法示例基本上是这个问题的每个答案:Going from Curry-0, 1, 2, to ...n。
我对@987654325@ 的工作原理很感兴趣,我想知道是否有一些示例可用。怎么把apply过程改写成别的函数,比如改写map这样?
#lang sicp
(define (map func sequence)
(if (null? sequence) nil
(cons (func (car sequence)) (map func (cdr sequence)))))
似乎它只是使用第一个参数进行函数调用?比如:
(apply list '(1 2 3 4 5)) ; --> (list 1 2 3 4 5)
(apply + '(1 2 3)) ; --> (+ 1 2 3)
那么在 Python 中可能会有类似的东西吗?
>>> args=[1,2,3]
>>> func='max'
>>> getattr(__builtins__, func)(*args)
3
【问题讨论】:
-
Scheme 没有
nil,那是 Lisp。 -
@Barmar 我正在使用
#lang sicp -
SICP 是教科书,不是语言。
-
@Barmar 是的,但它也是 DrRacket 中的一个选项:gyazo.com/28836fa26506a63c1c9d5dbb8ec9a386 和 docs.racket-lang.org/sicp-manual/index.html
标签: scheme lisp racket apply sicp