标签: racket

什么是轻量级lisp方言编译成可读的js?

什么是使用JS自己的类型编译为简短,可读和可修改的JS的lisp方言?

javascript lisp scheme racket

10
推荐指数
2
解决办法
1235
查看次数

如何在包含省略号的〜Optional中访问语法类属性?

TL; DR

我试图扩大可选省略号(~optional datum:my-class ...)成一种形式,使用从属性,my-class像这样:#'(list datum.attr ...)

但是由于表单是可选的,因此当表单不存在时,它将解析为#f,省略号模式不喜欢它:

;; ?: attribute contains non-list value
;;   value: #f
Run Code Online (Sandbox Code Playgroud)

我尝试使用的#:defaults参数~optional,如下所示:

(~optional datum:my-class ... #:defaults ([(datum 1) null]))
Run Code Online (Sandbox Code Playgroud)
;; which works for usage:
#'(list datum ...)
;; but not for:
#'(list datum.attr ...)
Run Code Online (Sandbox Code Playgroud)

我通过使用以下技巧使它起作用:

(~optional datum:my-class ...)

#'(list #,@(if (attribute datum) #'(datum.attr ...) #'()))
Run Code Online (Sandbox Code Playgroud)

我正在尝试寻找是否有更好的方法。

完整的可运行示例

我尝试将其保持在最低限度。检出测试子模块。要查看此问题,请取消注释parse-bag和运行的四个实现之一raco test file.rkt

#lang racket/base

(provide parse-bag)

(require
  (for-syntax racket/base syntax/parse) …
Run Code Online (Sandbox Code Playgroud)

racket

10
推荐指数
1
解决办法
183
查看次数

是否有人使用Racket商业化?

我一直在读关于如何使用Racket进行学术研究,但我在寻找商业和/或初创企业的商业成功案例时遇到了问题.有没有人在商业上使用Racket取得任何成功,还是我在错误的树上咆哮?我问,因为我有一个启动的想法,目前正在评估语言和工具.

lisp scheme startup racket

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

如何在DrRacket中运行Metacircular Evaluator

我试图运行(http://mitpress.mit.edu/sicp/full-text/book/book-ZH-26.html)在SICP 4.1中所述的程序,但已经在重新定义函数碰到一些困难,apply如这本书暗示你这样做.代码如下:

 #lang planet neil/sicp

;; -----------------------------------------------------------------------------
;; 4.1.1 The Core of the Evaluator
;; -----------------------------------------------------------------------------

;; Eval
(define apply-in-underlying-scheme apply)
(define (eval exp env)
  (display 'eval)
  (newline)
  (display exp)
  (newline)
  (cond ((self-evaluating? exp) exp)
        ((variable? exp) (let ((res (lookup-variable-value exp env)))
                           (display (list 'lookup exp))
                           (newline)
                           (display res)
                           (newline)
                           res))
        ((quoted? exp) (text-of-quotation exp))
        ((assignment? exp) (eval-assignment exp env))
        ((definition? exp) (eval-definition exp env))
        ((if? exp) (eval-if exp env))
        ((lambda? exp)
         (make-procedure (lambda-parameters exp)
                         (lambda-body exp)
                         env)) …
Run Code Online (Sandbox Code Playgroud)

lisp scheme racket

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

Scheme/Racket最佳实践 - 递归与可变累积

我是Scheme(通过Racket)和(在较小程度上)函数式编程的新手,并且可以通过变量和递归使用一些关于积累的优缺点的建议.出于本示例的目的,我正在尝试计算移动平均线.因此,对于列表'(1 2 3 4 5),3期移动平均线将是'(1 2 2 3 4).我们的想法是,期间之前的任何数字都不是计算的一部分,一旦我们达到集合中的期间长度,我们就会根据所选择的期间开始对列表的子集进行平均.

所以,我的第一次尝试看起来像这样:

(define (avg lst)
  (cond
   [(null? lst) '()]
   [(/ (apply + lst) (length lst))]))

(define (make-averager period)
  (let ([prev '()])
    (lambda (i)
      (set! prev (cons i prev))
      (cond
       [(< (length prev) period) i]
       [else (avg (take prev period))]))))

(map (make-averager 3) '(1 2 3 4 5))

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

这有效.我喜欢使用地图.它看起来很容易构建并且可以重构.我可以在将来看到堂兄弟像:

(map (make-bollinger 5) '(1 2 3 4 5))
(map (make-std-deviation 2) '(1 2 3 …
Run Code Online (Sandbox Code Playgroud)

recursion scheme accumulator racket

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

Scheme和Racket有什么不同?如果是这样,怎么样?

我注意到人们经常表现得像Stack Overflow上的Scheme和Racket一样(以及网络上的其他地方.例如,关于Scheme的问题经常在Racket中生成解决方案.如果你看一下标记的问题,你会看到他们的答案的一半开始#lang racket.

这两种语言真的如此相似,以至于它们可以被认为是平等的吗?Racket只是Scheme的扩展(即Scheme代码总是在Racket解释器上运行)?

我想强调一个事实,即这不是一个论战,只是一个学习Scheme编程语言的人的问题.

scheme racket

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

用Lisp编写正式的语言解析器

我的公司正在设计一种新的特定于域的脚本语言; 我必须实现一个解析器,将我们全新的编程语言转换为通用的脚本语言,以便能够实现它.

我这样做的通常方法是通过生成翻译器代码的工具BisonFlex工具C/C++.

对于大多数主流编程语言,我找到了其他工具,但没有找到Lisp.

没有Lisp曾经被使用是什么?编写解析器的常用方法是什么Lisp

注意:对我来说,任何Lisp可能有帮助的实现/方言都可以,我没有任何偏好.

lisp scheme formal-languages racket

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

`eval`和`eval-syntax`之间的区别

根据文档evaleval-syntax行为相同,异常eval 丰富了输入语法.

如果top-level-form是一个语法对象,其基准不是编译形式,那么它的词汇信息在被发送到评估处理程序之前会被丰富:

与eval类似,除了stx必须是语法对象,并且它的词汇上下文在传递给求值处理程序之前不会被丰富.

我很难理解这意味着什么.我得到的印象是以某种方式涉及命名空间,但我无法想出一个示例程序,其中eval和eval-syntax的行为不同.(当给出语法对象时.)

那么怎么做evaleval-syntax有所不同,或者至少你能给我一个样本程序,让他们表现出不同的行为?

eval racket

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

"自然递归"的定义是什么?

第三诫的小策士指出:

在构建列表时,描述第一个典型元素,然后将其纳入自然递归.

"自然递归"的确切定义是什么?我问的原因是因为我正在接受Daniel Friedman的编程语言原则课程,以下代码不被认为是"自然递归":

(define (plus x y)
    (if (zero? y) x
        (plus (add1 x) (sub1 y))))
Run Code Online (Sandbox Code Playgroud)

但是,以下代码被认为是"自然递归":

(define (plus x y)
    (if (zero? y) x
        (add1 (plus x (sub1 y)))))
Run Code Online (Sandbox Code Playgroud)

我更喜欢"非自然递归"代码,因为它是尾递归的.但是,这样的代码被认为是诅咒.当我问到为什么我们不应该以尾递归形式编写函数时,副教师简单地回答说:"你不要乱用自然递归."

以"自然递归"形式编写函数有什么好处?

lisp recursion scheme the-little-schemer racket

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

为什么cond是Scheme中的特殊形式,而不是函数?

(defun triangle-using-cond (number)
  (cond 
    ((<= number 0) 0) ; 1st
    ((= number 1) 1)  ; 2nd
    ((> number 1)     ; 3rd
      ;; 4th
      (+ number
         (triangle-using-cond (1- number))))))
Run Code Online (Sandbox Code Playgroud)

关于康德的事情

  • 它允许多个测试和替代表达式
  • 它具有预先指定的评估顺序.例如,第一个条件将始终评估它是否正确

我无法区分的一件事是cond与函数有什么不同!

scheme programming-languages functional-programming racket

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