标签: racket

关于Scheme中的"If .."(plt-scheme)

在我的Scheme程序中,我有一个非常简单的要求,即在'if' 的真实条件下执行多个语句..所以我写了我的代码,如下所示:

(if (= 1 1)
 ((expression1) (expression2))  ; these 2 expressions are to be
                                ; executed when the condition is true
  (expression3))
Run Code Online (Sandbox Code Playgroud)

显然,上面的方法不起作用,因为我无意间用#参数创建了一个#过程.因此,为了完成我的工作,我只需将上面的表达式放在一个新函数中,然后从那里调用它,代替expression1,expression2.有用.

所以,我的观点是:是否有其他条件结构可以支持我的要求?

lisp scheme racket

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

在球拍中包含外部文件

我想包括在给定的racket文件中定义的所有函数,以便获得与复制时相同的效果.有可能吗?

scheme include racket

15
推荐指数
2
解决办法
6798
查看次数

在Racket中设置默认参数值

是否可以为Racket中的某些参数设置默认值?

就像在Python中一样:

def f(arg=0)
    ...
Run Code Online (Sandbox Code Playgroud)

default-value racket

15
推荐指数
1
解决办法
5941
查看次数

Arc over Racket的优势

Arc建立在Racket之上.既然他们都在Lisp家族中,我很好奇Arc over Racket的优势,或者鉴于Racket可用,创建Arc的动机是什么?

lisp racket arc-lisp

15
推荐指数
2
解决办法
4400
查看次数

Typed Racket中的输入功能与Clojure中的类型功能有什么相同点和不同点?

Clojure的有代表类型,包括但不限于一些有趣的功能deftype,defprotocol,reifyextend.

Typed Racket中的输入功能与Clojure中的类型功能有什么相同点和不同点?

types protocols clojure racket typed-racket

15
推荐指数
1
解决办法
537
查看次数

在Racket中,列表相对于向量的优势是什么?

根据我迄今为止对Racket的经验,我没有太多考虑过向量,因为我认为他们的主要好处 - 对元素的持续时间访问 - 在你使用大量元素之前并不重要.

但是,这似乎不太准确.即使使用少量元素,向量也具有性能优势.例如,分配列表比分配向量要慢:

#lang racket

(time (for ([i (in-range 1000000)]) (make-list 50 #t)))
(time (for ([i (in-range 1000000)]) (make-vector 50 #t)))

>cpu time: 1337 real time: 1346 gc time: 987
>cpu time: 123 real time: 124 gc time: 39
Run Code Online (Sandbox Code Playgroud)

检索元素也比较慢:

#lang racket

(define l (range 50))
(define v (make-vector 50 0))

(time (for ([i (in-range 1000000)]) (list-ref l 49)))
(time (for ([i (in-range 1000000)]) (vector-ref v 49)))

>cpu time: 77 real time: 76 gc time: 0
>cpu …
Run Code Online (Sandbox Code Playgroud)

scheme list racket data-structures

15
推荐指数
3
解决办法
3103
查看次数

检查参数是列表还是原子

如何检查某物是否是原子?我正在寻找像number?或的东西list?.

scheme racket

14
推荐指数
2
解决办法
2万
查看次数

Guile Scheme和Standard Scheme之间的区别(在Racket IDE中)?

我有一堆"传统"Guile Scheme代码,我想在Racket Scheme IDE中运行.似乎有足够的差异使这成为一项非平凡的工作.(我的计划知识水平是完成The Little Schemer的水平).

我的问题是:

  1. Guile Scheme和Standard Scheme(在Racket IDE中)有什么区别?
  2. 鉴于这些差异,一般而言,我需要采取哪些步骤将一些Guile计划代码转换为标准计划?

附加:(对Racket Scheme和R5RS/R6RS之间的分歧感到满意) - 我想要的是在Racket IDE中运行'某些东西 - 而不是Racket语言.

scheme guile r6rs racket r5rs

14
推荐指数
1
解决办法
3505
查看次数

Typed Racket的类型推理如何工作?

Typed Racket做什么类型的推断?我在Racket邮件列表上找到了以下代码段:

Typed Racket类型系统包含许多超出Hindley/Milner风格类型系统支持的功能,因此我们无法使用该推理系统.目前,Typed Racket使用本地类型推断来推断程序中的许多类型,但我们想要推断更多类型 - 这是一个持续的研究领域.

上面的模糊使用术语"本地类型推断",我也听过"发生打字"使用了很多,但我不完全确定这些术语的含义.

在我看来,Typed Racket目前使用的类型推断系统是不必要的弱.这是我的意思的一个例子.以下不进行类型检查:

(struct: pt ([x : Real] [y : Real]))

(define (midpoint p1 p2)
  (pt (/ (+ (pt-x p1) (pt-x p2)) 2)
      (/ (+ (pt-y p1) (pt-y p2)) 2)))
Run Code Online (Sandbox Code Playgroud)

你必须明确地标注midpoint(: midpoint (pt pt -> pt)),否则你得到的错误:Type Checker: Expected pt, but got Any in: p1.为什么不能类型检查只是由此得出结论,该类型的p1p2 必须pt?这是对Racket实现类型的方式的一个基本限制(也就是说,由于某些Racket更高级的类型特性,这种推理方式实际上有时是错误的),或者这是否有可能在未来实现?

types type-inference racket typed-racket

14
推荐指数
1
解决办法
1332
查看次数

在SICP中使用lambda进行cons/car/cdr定义

当我在SICP中遇到以下'替代'定义的缺点和汽车时,我才开始觉得我对球拍和方案中lambda的使用有一个模糊的理解

(define (cons x y)
   (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

(define (cdr z)
  (z (lambda (p q) q)))
Run Code Online (Sandbox Code Playgroud)

对于我的生活,我无法解析它们.

任何人都能解释如何以对全新手有意义的方式解析或扩展这些吗?

lambda scheme sicp racket

14
推荐指数
1
解决办法
4086
查看次数