gpt4 book ai didi

functional-programming - Scheme 上是否有 "set!"的替代方案

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:22 24 4
gpt4 key购买 nike

想知道是否有使用 set 的替代方法!在计划/ Racket 中。正在处理作业,我们不允许使用 set!

对于我的一个函数,我有一个增量器

(set! count (+ count 1))

想知道我将如何更改它以便它不会使用 set!

最佳答案

据推测,不允许您使用 set! 的原因是您被要求以功能方式而不是命令方式解决问题。让我用两个不同的函数来说明,这两个函数都确定列表的长度:

#lang racket

(require rackunit)

(define count 0)
(define (imperative-length l)
(cond [(empty? l) count]
[else (set! count (+ 1 count))
(imperative-length (rest l))]))

(check-equal? (imperative-length '(4 3 2 1)) 4)


(define (functional-length l)
(cond [(empty? l) 0]
[else (+ 1 (functional-length (rest l)))]))


(check-equal? (functional-length '(4 3 2 1)) 4)


;; what happens if we try calling imperative-length again?


(check-equal? (imperative-length '(4 3 2 1)) 4)

;; oh no!

;; what happens if we try calling functional-length again?

(check-equal? (functional-length '(4 3 2 1)) 4)

;; yep, works fine.

这两个函数都可以正常工作,但功能函数可以重复调用。但!但!你可能会说,我只需要记住将计数器设置回零,或者将 count 的绑定(bind)放在函数中。这是事实,但一般来说,函数式解决方案根本不需要程序员担心这种交互。

那么,这对您意味着什么?这可能意味着您需要将 count 作为另一个参数传递。只是一个猜测。

关于functional-programming - Scheme 上是否有 "set!"的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777608/

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