"对于Scheme中的每个"或"每个"关键字

Jon*_*han 2 scheme loops racket

Scheme中是否有for循环或for each循环?

我一直在搜索,发现有一个关键字" every",但我正在使用的方案编译器语言没有预先构建的这个函数.这是它想要做的,它可以在这里找到

(define (first-letters sent)
  (every first sent))

> (first-letters '(here comes the sun))
(H C T S)
Run Code Online (Sandbox Code Playgroud)

我该如何重写这个every功能?使用其他预定义的功能.我正在使用的语言是DrScheme - 编程语言要点(第3版)

我在DrScheme中尝试了所有预先安装的编译器,它们都没有可以编译该every函数.

有任何想法吗 ?

Nat*_*ers 6

你正在寻找map,虽然你可能想知道Scheme也有for-each.map完全符合你的要求every.它对列表中的每个项执行某些操作,返回新的结果列表.

你甚至可以说

(define every map)
Run Code Online (Sandbox Code Playgroud)

你可以first通过写作来获得你的功能

(define (first symbol)
  (string->symbol (string (string-ref (symbol->string symbol) 0))))
Run Code Online (Sandbox Code Playgroud)

不过,这是糟糕的Scheme风格.它看起来像60年代或70年代的古代Lisp,在字符串处于语言之前.无论如何,现在你可以说

(map first '(here comes everybody))
=> (h c e)
Run Code Online (Sandbox Code Playgroud)

for-each 对列表中的每个项目产生某种副作用:

(define initials (map first '(here comes everybody)))
(for-each display initials)
=> hce
Run Code Online (Sandbox Code Playgroud)

  • `first`的定义稍微好一点``(string-> symbol(substring(symbol-> string symbol)0 1))`. (2认同)