【发布时间】:2021-01-19 18:11:24
【问题描述】:
我想写这样的函数:
(define foo (\ (a b c) (+ a (+ b c))))
让它自动转换成这个:
(define foo (lambda (a) (lambda (b) (lambda (c) (+ a (+ b c))))))
并像这样使用它(如果可能的话):
(map (foo 1 2) (interval 1 10))
好像我在写这个:
(map ((foo 1) 2) (interval 1 10))
我不知道如何在 scheme 中编写宏,但我需要编写一个函数来转换带引号的表达式
(f arg1 arg2 argn)
像这样:
(define-macro clambda ;curried lambda
(lambda xs
(if (< (length xs) 2)
(if (eq? 1 (length xs))
(lambda () xs)
(lambda (head xs) (tail xs)))
(lambda (head xs) (clambda (tail xs))))))
我该怎么做?
【问题讨论】:
-
(f arg1 arg2 argn)我的意思是(f arg1 arg2 body)或(f (arg1 arg2) body)。
标签: scheme racket currying guile chicken-scheme