gpt4 book ai didi

scheme - 删除方案中的额外括号

转载 作者:行者123 更新时间:2023-12-02 01:28:19 25 4
gpt4 key购买 nike

使用类似 Scheme 的语言,我正在转换

(quote (lambda (a b) (* a b) (+ a b))))

到:

(quote (lambda (a) (lambda (b) (+ a b) (* a b))))

但是在我当前的实现中,我在表达式 (+ a b)(* a b) 周围多了一对括号:

(lambda (a) (lambda (b) ((+ a b) (* a b))))

我花了很多时间试图解决这个问题,但无法弄清楚。我觉得修复应该是微不足道的。

这是我目前的代码:

(define (conv lyst)

(define (helper args)
(cond
((null? args) (append (cddr lyst) args))
(else (cons (car lyst)
(cons (list (car args))
(list (helper (cdr args))))))))

(cond
((eq? 1 (length (car (cdr lyst)))) lyst)
(else (helper (car (cdr lyst))))))

最佳答案

我认为您的实现可以简化。这应该有效:

(define (conv lyst)  
(define (helper args)
(if (null? (cdr args))
(cons 'lambda
(append (list (list (car args)))
(cddr lyst)))
(list 'lambda
(list (car args))
(helper (cdr args)))))
(helper (cadr lyst)))

或者更简单,使用 quasiquoting and splicing :

(define (conv lyst)  
(define (helper args)
(if (null? (cdr args))
`(lambda (,(car args)) ,@(cddr lyst))
`(lambda (,(car args)) ,(helper (cdr args)))))
(helper (cadr lyst)))

无论哪种方式,它都按预期工作:

(conv '(lambda (a b) (* a b) (+ a b)))
=> '(lambda (a) (lambda (b) (* a b) (+ a b)))

关于scheme - 删除方案中的额外括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35678097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com