在球拍中配管
问题描述:
是否可以在球拍的配管中输出一个功能。例如,可以重写下列代码:在球拍中配管
(define (safestr sentstr)
(list->string
(remove*
(list #\| #\; #\: #\/ #\\ #\' #\")
(string->list sentstr))))
(define (safestr sentstr)
sentstr |
(string->list .) |
(remove* (list #\: #\;) .) |
(list->string .))
其中“。”表示前面的语句的输出。
这也显示了正常的流向和进度方向,而不是反向流动。
作为语言来创建语言的球拍应该能够做到这一点。我在这里检查了https://docs.racket-lang.org/reference/pipeports.html,但找不到如何操作。
感谢您的意见/答复。
答
是的,实际上,虽然语法与您列出的语法有很大不同。 threading
包实现了这种类型的东西,借用了Clojure的线程宏。使用threading
,你的函数应该是这样的:
(require threading)
(define (safestr sentstr)
(~>> sentstr
string->list
(remove* (list #\| #\; #\: #\/ #\\ #\' #\"))
list->string))
看看为~>>
文档的详细信息。
你也可以使用λ~>>
,从而无需完全命名参数:
(require threading)
(define safestr
(λ~>> string->list
(remove* (list #\| #\; #\: #\/ #\\ #\' #\"))
list->string))
另外还有point-free
包,它实现了使用高阶函数,而不是宏类似的功能。当一个lambda速记包像curly-fn
配对,结果结束了,而无需使用宏看上去很类似于使用threading
版本:
#lang curly-fn racket/base
(require point-free)
(define safestr
(λ~> string->list
#{remove* (list #\| #\; #\: #\/ #\\ #\' #\")}
list->string))
我不知道为什么,这是downvoted ... – molbdnilo
行话注意到,虽然:“输出”这个词几乎从来不用于引用函数的结果或返回值,并且Scheme或Racket中没有“语句”。谷歌搜索这些词可能不会带来好的结果。 – molbdnilo