标签: racket

当省略'else'时,Scheme'cond'子句会发生什么?

我正在学习Scheme.我最近花了(太多!)时间试图找到程序中的错误,然后才意识到我错过了cond子句中的'else'字样.但在这种情况下的行为似乎有点奇怪.只用一个简单的程序(下面)试验条件,'else'在else子句中按预期显示,但也会显示,但没有'else',会显示周围的双引号和未解释的新引号字面打印.任何人都可以向我解释发生了什么事吗?TIA.

   (define (foo x)
    (cond ((eq? x 0) (display "zero\n"))
          (display "whatever\n")))

   (define (bar x)
    (cond ((eq? x 0 ) (display "zero\n"))
          (else (display "whatever\n"))))

In the repl window:
Welcome to DrScheme, version 4.1.5 [3m].
Language: Pretty Big; memory limit: 128 megabytes.
> (foo 0)
zero
> (bar 0)
zero
> (foo 2)
"whatever\n"
> (bar 2)
whatever
> 
Run Code Online (Sandbox Code Playgroud)

scheme racket

9
推荐指数
2
解决办法
7564
查看次数

Racket REPL over TCP

我用Racket(以前的PLT Scheme)构建了一个相当复杂的应用程序,并希望添加一个REPL用于调试目的.我试图通过TCP流访问它:

(define repl-server
  (thread (lambda ()
          (let ((listener (tcp-listen 8082 5 #t)))
            (do () (#f)
              (let-values (((in out) (tcp-accept listener)))
                (thread (lambda ()
                          (let ((port-string (get-port-string in)))
                             (Try "debug-repl" #f
                               (begin
                                 (file-stream-buffer-mode out 'line)
                                 (display-and-log "Password: " out)
                                 (flush-output out)
                                 (when (string=? (read-line in) "whatever")
                                   (log "Connect to REPL: " port-string))
                                   (current-input-port in)
                                   (current-output-port out)
                                   (current-error-port out)
                                   (read-eval-print-loop))
                                 (close-input-port in)
                                 (close-output-port out))))))))))))
Run Code Online (Sandbox Code Playgroud)

(Try name result-if-exception form) 是一个提供基本异常处理的宏,(log ...)和(display-and-log ...)执行它们的声音.

现在,如果我访问REPL,我甚至无法评估常量,因为我不断收到错误compile: unbound identifier (and no #%app syntax transformer is …

scheme eval racket read-eval-print-loop

9
推荐指数
1
解决办法
1453
查看次数

如何在球拍中评估字符串

我试图了解如何让eval函数读取字符串并评估字符串中的内容.

目前我知道

> (eval '(+ 1 2))
   3
Run Code Online (Sandbox Code Playgroud)

但是我对球拍的使用知之甚少.所以目前我正试图让它能够做到这一点:

> (eval "(+ 1 2)")
   3
Run Code Online (Sandbox Code Playgroud)

任何建议或有用资源的链接将不胜感激.

string eval racket

9
推荐指数
1
解决办法
3268
查看次数

我在函数的最后递归调用中得到了"scheme application not a procedure"

所以这是代码:

(define (time-prime-test n)
  (newline)
  (display n)
  (start-prime-test n (runtime)))

(define (start-prime-test n start-time)
  (if (prime? n)
      (report-prime (- (runtime) start-time))))

(define (report-prime elapsed-time)
  (display " *** ")
  (display elapsed-time))

(define (search-for-primes n m)
  (if (< n m) 
      ((time-prime-test n)
       (search-for-primes (+ n 1) m))
      (display " calculating stopped. ")))
(search-for-primes 100000 100020)
Run Code Online (Sandbox Code Playgroud)

我在"计算停止"后得到了这个错误.已经显示.如下:

100017 100018 100019 * 54计算停止...申请:不是程序; 期望一个可以应用于给
定参数的过程:#<void>
arguments ...:
#<void>

recursion scheme if-statement racket

9
推荐指数
1
解决办法
1万
查看次数

什么构成DrRacket编程语言的核心

什么构成了Racket编程语言的核心?核心基于任何RnRS规范与所有附加功能,例如基于该微小核心的众多序列方法,还是语言核心参考部分中的所有内容?

scheme racket

9
推荐指数
1
解决办法
310
查看次数

对球拍合同感到困惑

我定义了一个true?与球拍/列表中的计数一起使用的函数.

(define (true? expr)
  (and (boolean? expr) expr #t))
Run Code Online (Sandbox Code Playgroud)

我注意到我可以提供数字参数,我的功能很乐意返回#f.

> (true? 6)
#f
Run Code Online (Sandbox Code Playgroud)

所以,我想我会探索使用球拍合约来使非布尔参数在合同违规中返回错误.所以我把这个代码放在我的文件的顶部:

(provide (contract-out
          [true?         (-> boolean? boolean?)]))
Run Code Online (Sandbox Code Playgroud)

但是,在添加合同后,我仍然在球拍REPL中获得与上述相同的行为.我不明白这是怎么回事.我错过了什么?

racket

9
推荐指数
2
解决办法
1329
查看次数

如何清除Dr. Racket IDE中的解释器屏幕?

刚刚开始进入The Little Schemer,并有一个非常基本的Dr. Racket IDE问题:

  1. 如何清除翻译屏幕?

  2. 如何设置向上箭头以显示以前键入的项目(如在Bash中)而不是当前滚动屏幕的行为?

我的搜索空白,可能是因为我不知道这些操作的技术术语.

lisp ide scheme the-little-schemer racket

9
推荐指数
1
解决办法
4745
查看次数

什么相当于Clojure在Racket中的迭代功能

我今天正在玩Racket,并试图根据同一功能的多个应用程序产生一个不确定的数字序列.

在Clojure中我会使用iterate函数,但我不确定在Racket中它的等价物.

functional-programming clojure racket

9
推荐指数
3
解决办法
230
查看次数

从C调用球拍功能

我有一个球拍模块hw.rkt:

#lang racket/base

(provide hw)

(define (hw) (displayln "Hello, world!"))
Run Code Online (Sandbox Code Playgroud)

我想编写一个嵌入Racket运行时并应用该过程的C程序(hw).

有示例代码这里演示如何嵌入球拍运行时和应用过程,在racket/base,或阅读和评价的S-表达,但我没有运气修改这些代码以允许访问(hw)程序.

本页面似乎是说,这是可能做到什么,我想先编译hw.rkt使用到hw.c做raco ctool --c-mods,当我尝试这工作得很好,但我仍然无法实际访问(hw)过程.

如果有人可以发布一个完整的示例程序,或者只是描述要使用哪些C函数,我将非常感激.从那里我可以弄清楚剩下的.


编辑以提供我尝试过的事情的示例.

我修改了示例程序以摆脱"评估命令行参数"位并直接跳到REPL以便我可以进行实验.因此(用"hw.c"运行的结果raco ctool --c-mods hw.c ++libs racket/base hw.rkt):

#define MZ_PRECISE_GC
#include "scheme.h"

#include "hw.c"

static int run(Scheme_Env *e, int argc, char *argv[])
{
  Scheme_Object *curout = NULL, *v = NULL, *a[2] = {NULL, NULL};
  Scheme_Config *config = NULL;
  int i;
  mz_jmp_buf * volatile save = NULL, fresh; …
Run Code Online (Sandbox Code Playgroud)

c embedding racket

9
推荐指数
1
解决办法
462
查看次数

期待一个模块声明,发现了别的什么?

我正在研究需要数学/数论库的Racket脚本(在Linux机器上).我现在的整个脚本是这样的:

#!/usr/bin/racket

(require math/number-theory)
Run Code Online (Sandbox Code Playgroud)

是的,它实际上只需要图书馆.

当我尝试运行它时,我得到一个错误,上面写着"预期的'模块'声明:其他东西".

但是,当我在终端中实际启动Racket时:

/usr/bin/racket
Run Code Online (Sandbox Code Playgroud)

并在命令行中输入(需要数学/数论),它将它视为完全有效.

这里发生了什么?

racket

9
推荐指数
1
解决办法
2658
查看次数