标签: racket

LISP In Small Pieces - 运行代码的最佳LISP环境?

Christian Queinnec写了一篇名为LISP In Small Pieces的杰作,其中包括11个Lisp Interpreters和两个Lisp编译器.

当你去从网站下载的代码在这里 -它的评论:

The programs of this book are available on the net. 
These programs used to run with some Scheme systems around 1994.
Run Code Online (Sandbox Code Playgroud)

任何的想法:

(a)当时运行的计划系统是什么,更重要的是;

(b)今天会运行哪些计划系统?

lisp scheme common-lisp racket

13
推荐指数
3
解决办法
3220
查看次数

删除列表的最后一个元素(方案)

所以我必须删除方案中列表的最后一个元素.

例如,假设我有一个列表(1 2 3 4).我需要回复:

(1 2 3)
Run Code Online (Sandbox Code Playgroud)

我的想法:

reverse(list)
car(list)
reverse(list)
Run Code Online (Sandbox Code Playgroud)

reverse方案(球拍)中有功能吗?

scheme racket

12
推荐指数
4
解决办法
3万
查看次数

运行基于SICP模式匹配规则的替代码

我在网上找到了本课的代码(http://groups.csail.mit.edu/mac/ftpdir/6.001-fall91/ps4/matcher-from-lecture.scm),我有一段时间了试图调试它.该代码看起来与Sussman所写的相当:

;;; Scheme code from the Pattern Matcher lecture

;; Pattern Matching and Simplification

(define (match pattern expression dictionary)
  (cond ((eq? dictionary 'failed) 'failed)
        ((atom? pattern)
         (if (atom? expression)
             (if (eq? pattern expression)
                 dictionary
                 'failed)
             'failed))
        ((arbitrary-constant? pattern)
         (if (constant? expression)
             (extend-dictionary pattern expression dictionary)
             'failed))
        ((arbitrary-variable? pattern)
         (if (variable? expression)
             (extend-dictionary pattern expression dictionary)
             'failed))
        ((arbitrary-expression? pattern)
         (extend-dictionary pattern expression dictionary))
        ((atom? expression) 'failed)
        (else
         (match (cdr pattern)
                (cdr expression)
                (match (car pattern)
                       (car expression)
                       dictionary)))))

(define (instantiate skeleton …
Run Code Online (Sandbox Code Playgroud)

lisp scheme sicp racket

12
推荐指数
1
解决办法
1605
查看次数

如何使用Lisp创建GUI:DrScheme或Common Lisp

或者需要做的基本工作是创建GUI.我知道GUI的基本组件,但从哪里开始.我只是一个自学者,我正在阅读本书末尾的"如何设计程序"(HtDP),作者认为GUI和CGI计算机网络的知识需要成为程序员.最后两个的信息很容易找到.但似乎很少有人谈论如何创建GUI.我想也许在设计计算机程序的过程中它太"低",很少有人关心.

lisp user-interface racket

12
推荐指数
3
解决办法
9636
查看次数

用于emacs的Racket flymake模式

是否有可能让flymake-mode知道racket文件中的语法(或其他)错误,例如erlang或python?如果重要的话,我正在使用geiser-mode进行球拍.

emacs scheme syntax-error flymake racket

12
推荐指数
1
解决办法
398
查看次数

试图从Racket中的字符串创建日期 - find-seconds非常慢,每周工作日需要?

我正在尝试从Racket中的大型csv文件中解析日期.

最直接的方法是创建一个新date结构.但它需要week-dayyear-day参数.当然我没有这些,这似乎date是我不理解的模块的真正弱点.

因此,作为替代方案,我决定使用find-seconds将原始日期值转换为秒,然后将其传递给seconds->date.这有效,但是非常慢.

(time
 (let loop ([n 10000])
   (apply find-seconds '(0 0 12 1 1 2012)) ; this takes 3 seconds for 10000
   ;(date 0 0 12 1 1 2012 0 0 #f 0) ; this is instant
   (if (zero? n)
       'done
       (loop (sub1 n)))))
Run Code Online (Sandbox Code Playgroud)

find-seconds需要3秒才能完成10000个值,我有几百万个.创建date结构当然是即时的,但我没有周日,年日值.

我的问题是:

1.)为什么week-day/ year-day需要创建日期结构?

2.)find-seconds应该是这么慢(即bug)?或者我做错了什么?

3.)是否有任何替代方法可以快速解析日期.我知道srfi/19有一个string->date功能,但我必须改变一切以使用该模块的结构而不是球拍的内置结构.并且它可能遭受同样的性能命中,我不确定.

datetime racket

12
推荐指数
1
解决办法
1017
查看次数

宏应该有副作用吗?

可以(或应该)宏观扩张有副作用吗?例如,这是一个实际上在编译时抓取网页内容的宏:

#lang racket

(require (for-syntax net/url))
(require (for-syntax racket/port))

(define-syntax foo
  (lambda (syntx)
    (datum->syntax #'lex
                   (port->string
                     (get-pure-port
                       (string->url
                         (car (cdr (syntax->datum syntx)))))))))
Run Code Online (Sandbox Code Playgroud)

然后,我可以做(foo "http://www.pointlesssites.com/"),它将被取代"\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\r\n\t <and so on>"

这是好习惯吗?我是不是觉得Racket只运行一次这段代码?如果我(display "running...")在宏中添加一行,它只打印一次,但我不想从一个例子中推广......

PS - 我问的原因是因为我实际上认为这有时候非常有用.例如,是一个库,允许您从Google API Discovery服务加载(在编译时)发现文档,并自动为其创建包装器.我认为,如果库实际上是从Web获取发现文档而不是本地文件,那将会非常酷.

另外,举一个具有不同副作用的宏的例子:我曾经构建了一个宏,它将一小部分Racket翻译成(eta-expanded)lambda演算(当然,它仍然可以在Racket中运行).每当宏完成翻译函数时,它都会将结果存储在字典中,以便稍后调用宏可以在自己的翻译中使用该函数定义.

macros side-effects racket

12
推荐指数
1
解决办法
550
查看次数

PLT Redex:参数化语言定义

这是一个一直困扰着我的问题,我想知道这里是否有人可以提供帮助.

我有一个名为lambdaLVar的PLT Redex模型,它或多或少是一个花园种类的无类型lambda演算,但扩展了包含"格子变量"或LVars的商店.LVar是一个变量,其值只能随时间增加,其中"增加"的含义由语言用户指定的部分有序集(也称为格子)给出.因此lambdaLVar实际上是一个语言系列 - 用一个格子实例化它,你得到一种语言; 有一个不同的格子,你得到另一个.你可以看看这里的代码; 重要的是lambdaLVar.rkt.

在lambdaLVar的纸上定义中,语言定义由用户指定的晶格参数化.很长一段时间,我想在Redex模型中进行相同类型的参数化,但到目前为止,我还没弄清楚如何.部分麻烦在于语言的语法取决于用户如何实例化格子:格子的元素成为语法中的终端.我不知道如何在Redex中表达格式上的抽象语法.

与此同时,我试图将lambdaLVar.rkt尽可能地模块化.该文件中定义的语言专用于特定晶格:具有max最小上限(lub)操作的自然数.(或者,相当于,自然数字排序<=.它是一个非常无聊的格子.)特定于该格子的代码的唯一部分是(define lub-op max)靠近顶部的线,并natural出现在语法中.(有一个lub元函数是根据用户指定的lub-op函数定义的.后者只是一个Racket函数,所以lub必须逃避到Racket调用lub-op.)

除非能够以一种抽象的方式实际指定lambdaLVar,这种方式对于格子的选择是抽象的,似乎我应该能够编写一个lambdaLVar的版本,其中最简单的格子 - 只有Bot和Top元素,其中Bot <= Top - 然后define-extended-language用来添加更多东西.例如,我可以定义一种名为lambdaLVar-nats的语言,它专门用于我描述的自然格点:

;; Grammar for elements of a lattice of natural numbers.
(define-extended-language lambdaLVar-nats
  lambdaLVar
  (StoreVal .... ;; Extend the original language
            natural))

;; All we have to specify is the lub operation; leq is implicitly <=
(define-metafunction/extension lub lambdaLVar-nats …
Run Code Online (Sandbox Code Playgroud)

formal-semantics racket plt-redex

12
推荐指数
1
解决办法
769
查看次数

如何在球拍中使用多个返回值执行任何操作?

似乎为了在Racket中使用多个返回值,我必须使用define-values或将它们收集到列表中(call-with-values (thunk (values-expr)) list).在后一种情况下,为什么有人会选择返回多个值而不是列表,如果只是必须将它们收集到列表中呢?此外,这些都非常冗长,并且难以适应大多数代码.我觉得我必须误解一些关于多重回报价值的基本信息.就此而言,如何编写接受多个返回值的过程?

racket

12
推荐指数
1
解决办法
4665
查看次数

DrRacket在OS X 10.10(Yosemite)上崩溃?

我在最新版本的OS X,Yosemite上使用DrRacket,但是当我打开DrRacket时,系统告诉我"DrRacket意外退出".我已经尝试重新启动计算机了,我确定我有64位版本的Racket,所以这里出了什么问题?

racket osx-yosemite

12
推荐指数
1
解决办法
2983
查看次数