首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用同名的自定义函数替换球拍的功能吗?可行吗?

我能用同名的自定义函数替换球拍的功能吗?可行吗?
EN

Stack Overflow用户
提问于 2022-07-06 07:58:48
回答 2查看 72关注 0票数 1

在下面的代码中,我定义了我自己的a-hl,我的意思是用它替换代码中append的直接调用。它并没有真正替换它,因为它使用了附加在引擎盖下面(请参阅注释):

代码语言:javascript
复制
#!/usr/bin/env racket
#lang racket/base

(require racket/file)

(define (a-hl l e) (append l (list e)))  
(define content (list "https://youtu.be/FVaVLpSHw38 Road to the Arnold" "https://www.youtube.com/watch?v=hlTfA42b_uI MIT Bitcoin Expo 2022: Breaking Through - Lightning Panel"))
(define arr (list))
(for ((l content)) 
  ;(set! arr (append arr (list (regexp-replace* #rx" .*" l "")))))
  (set! arr (a-hl arr (regexp-replace* #rx" .*" l "")))); works just as well but it is shorter
  
(for ((e arr)) (display e))

密码很好用。但是当我试图定义我自己的append(define (append l e) (append l (list e)))和它的时候,

代码语言:javascript
复制
(for ((l content)) 
  (set! arr (append arr (regexp-replace* #rx" .*" l ""))))
  
(for ((e arr)) (display e))

球拍结冰了。用同名的自定义函数来代替球拍的功能是完全可行的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-06 09:52:37

您可以使用Racket的require's only-in子句为模块中的绑定提供自己的名称,并使用:

代码语言:javascript
复制
#lang racket

(require (only-in racket/base [append builtin-append]))
(define (append l e) (builtin-append l (list e)))
(writeln (append '(1 2 3) 4)) ; (1 2 3 4)

或者使用local-require只在函数中导入它:

代码语言:javascript
复制
(define (append l e)
  (local-require (only-in racket/base [append builtin-append]))
  (builtin-append l (list e)))
票数 4
EN

Stack Overflow用户

发布于 2022-07-06 08:26:48

您可以定义您自己的函数版本,这样做只会影响您的模块中的代码,这些模块都是从模块中require定义的。

对于像append这样的定义,是否应该这样做是另一个问题:这样做是为粗心大意的人设置陷阱和陷阱的好方法。也许,只有当你真正理解这样做的后果,如果你在构建一种语义上与标准的语言非常不同的语言的过程中,这才是该做的事情。

在这种情况下,似乎被困在陷阱中的粗心大意的人就是你。您对append的定义是:

代码语言:javascript
复制
(define (append l e)
  (append l (list e)))

这一定义显然既不会终止,也会在不终止的过程中使用无界内存。

您的问题似乎是,您认为定义中调用的append版本是Racket的版本。事实并非如此:这不是define的工作方式,在这种情况下也不是。以类似的形式

代码语言:javascript
复制
(define (<name> ...)
  ... <name> ...)

或等量

代码语言:javascript
复制
(define <name>
  (lambda (...) ... <name> ...))

然后(假设没有<name>的中间绑定),<name>引用您正在定义的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72879812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档