小编The*_*rza的帖子

在Racket中安装软件包

我安装了DrRacket,完整版本不是最小的,但我没有包.

当我运行此代码时:

#lang racket

(provide (all-defined-out))

(require rsound)

(play ding)
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

standard-module-name-resolver: collection not found
  for module path: rsound
  collection: "rsound"
  in collection directories:
   C:\Users\Theodor\AppData\Roaming\Racket\6.3\collects
   C:\Program Files\Racket\collects
   ... [161 additional linked and package directories] in: rsound
  no packages suggestions are available .
Run Code Online (Sandbox Code Playgroud)

在"收集"中,我只有"catalog.sqlite".

如何为DrRacket安装软件包?"更新目录"不起作用.其他类似的问题没有帮助.

lisp install packages racket

6
推荐指数
1
解决办法
2337
查看次数

用于扩展代码的球拍宏

我希望能够写:

(nota E2 82)
Run Code Online (Sandbox Code Playgroud)

代替:

(define E2
  (network ()
           [sunet <= sine-wave 82]
           [out = (+ sunet)]))
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用宏来做到这一点,并尝试写这个:

(define-syntax (nota stx)
  (syntax-case stx ()
    [(nota x) #'(network ()
                         [sunet <= sine-wave x]
                         [out = (+ sunet)])]))
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

nota: bad syntax in: (nota E2 82)
Run Code Online (Sandbox Code Playgroud)

macros define-syntax pattern-matching racket

4
推荐指数
1
解决办法
56
查看次数

Racket中的Clojure等价物:(地图#(程序)(列表))

我有这个Clojure代码:

(def target-data
  (map #(vector % (+ (* % %) % 1))
       (range -1.0 1.0 0.1)))
Run Code Online (Sandbox Code Playgroud)

我如何在Racket中翻译它?我试过了:

(define (target-data)
  (map #(vector % (+ (* % %) % 1))
       (range -1.0 1.0 0.1)))
Run Code Online (Sandbox Code Playgroud)

#这似乎是在Clojure的读者宏没有其在球拍等同.我该如何创建它?

dictionary clojure racket

3
推荐指数
1
解决办法
188
查看次数

用作表达式的球拍关键字

我尝试编写一个程序,在源代码中添加字符串"hello world".source.rkt中文件的名称.它给了我这个错误:

source.rkt:6:31: #%datum: keyword used as an expression in: #:mode
  #(118 6)
Run Code Online (Sandbox Code Playgroud)

这是代码:

#lang racket

(provide (all-defined-out))

(define out (open-output-file "source.rkt"
                             [#:mode 'text               
                              #:exists 'can-update]))

(write "hello world" out)

(close-output-port out)
Run Code Online (Sandbox Code Playgroud)

syntax keyword racket

2
推荐指数
1
解决办法
308
查看次数

使用词法闭包的球拍

我在Let over Lambda中阅读了有关词汇clojures的内容,并且此代码示例适用于Common Lisp:

(let ((counter 0))
  (lambda () (incf counter)))
Run Code Online (Sandbox Code Playgroud)

我试着在Racket中写成这样:

(let ((counter 0))
  (lambda() (+ counter 1)))
Run Code Online (Sandbox Code Playgroud)

当我在REPL中调用它时,counter它给了我错误:

counter: undefined;
 cannot reference an identifier before its definition
Run Code Online (Sandbox Code Playgroud)

据我了解,将let / set与lambda混合使用可以在lambda中存储某些状态,该状态可以由其他功能处理,其方式与人类记忆可以通过感官的输入进行处理和更改一样。我对我的LISP程序中的部分代码感兴趣,这些代码部分因与其他功能的交互而更改。即使lambda不能做到这一点,我仍然想了解它(lambda函数),因为它似乎是Racket和其他LISP方言的重要组成部分。

lambda lexical-closures racket

2
推荐指数
1
解决办法
165
查看次数