我目前正在解决Project Euler的问题,我正在用C#和Scheme(Racket实现)解决它们.我知道C#,但我正在学习Scheme.
现在,除了找到问题的正确结果之外,我还想提出我能想到的最快的解决方案.为此,在C#中我使用StopWatch来测量代码的性能.有时间代码执行的类似Scheme库/功能吗?
试图理解free-identifier =?和bound-identifier =?.任何人都可以给我使用free-identifier =的等效代码示例吗?将返回true并使用bound-identifier =?将返回false.
谢谢
我在处理文本文件并将其转换为列表或字符串时遇到了一些问题.
说我有"blah.txt",其中包含:
3 + 4
Run Code Online (Sandbox Code Playgroud)
现在我想调用我知道可以完成的文件
(define in (open-input-file "blah.txt"))
Run Code Online (Sandbox Code Playgroud)
我从哪里拿到它?
我在Racket中遇到了这个任务5天,有人知道我该如何处理它?
给定arity 2的功能和n元素列表,返回所有元素的字符串函数的评估,例如:
>(reduce + '(1 2 3 4 5 6 7 8 9 10))
55
> (reduce zip '((1 2 3) (4 5 6) (7 8 9)))
'((1 (4 7)) (2 (5 8)) (3 (6 9)))
Run Code Online (Sandbox Code Playgroud) 我是Racket(和Lisp的一般)的新手,我想知道是否有一种规范的方法可以检测脚本是否从命令行运行?
例如,在Python中,执行此操作的标准方法是if __name__ == __main__::
def foo():
"foo!"
if __name__ == "__main__":
foo()
Run Code Online (Sandbox Code Playgroud)
现在,假设我有以下的Racket代码,并且respond只有当它作为脚本运行时我才会被调用.
#lang racket
(require racket/cmdline)
(define hello? (make-parameter #f))
(define goodbye? (make-parameter #f))
(command-line #:program "cmdtest"
#:once-each
[("-H" "--hello") "Add Hello Message" (hello? #t)]
[("-G" "--goodbye") "Add goodbye Message" (goodbye? #t)])
(define (respond)
(printf "~a\n"
(apply string-append
(cond
[(and (hello?) (goodbye?)) '("Hello" " and goodbye.")]
[(and (hello?) (not (goodbye?))) '("Hello." "")]
[(and (not (hello?)) (goodbye?)) '("" "Goodbye.")]
[else '("" "")]))))
Run Code Online (Sandbox Code Playgroud)
有没有简单/标准的方法来实现我想要的?
我有一个球拍模块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) 如何在java-中实现plt-scheme中的循环
for(int i=0;i<10;){
for(int j=0;j<3;){
System.out.println(""+j);
j++;
}
System.out.println(""+i);
i++;
}
Run Code Online (Sandbox Code Playgroud) 给定两个列表,返回一个列表,其元素是大小为2的列表,这样对于i-th列表,第一个元素是i第一个原始列表的i第 - 个元素,第二个元素是第二个原始列表的第 - 个元素名单.如果一个列表小于另一个列表,则结果列表的大小最小; 因此,如果其中一个列表为空,则返回一个空列表.例如:
> (zip '(1 2) '(3 4))
'((1 3) (2 4))
> (zip '(1 2 3) '())
'()
> (zip '() '(4 5 6))
'()
> (zip '(8 9) '(3 2 1 4))
'((8 3) (9 2))
> (zip '(8 9 1 2) '(3 4))
'((8 3) (9 4))
Run Code Online (Sandbox Code Playgroud) 在The Little Schemer的第3章中,关于为什么我们不立即简化rember函数的问题的答案是"因为那时函数的结构与其参数的结构不一致".我无法理解函数的结构是什么,参数的结构是什么,以及它们之间的区别.
这是未简化的版本:
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
(else (cond
(( eq? (car lat) a) (cdr lat))
(else (cons (car lat)
(rember a
( cdr lat)))))))))
Run Code Online (Sandbox Code Playgroud)
这是简化的:
(define rember
(lambda (a lat)
(cond
((null? lat) (quote ()))
((eq? (car lat) a) (cdr lat))
(else (cons (car lat)
(rember a (cdr lat)))))))
Run Code Online (Sandbox Code Playgroud)
据我所知,主要的不同之处在于,这个功能已经从两个问题变成了一个问题,每个问题一个问题,一个问题得到两个问题.
函数的参数是原子"a"和列表"lat".
这是第一次在密集书面的前言之外,书中引用了"结构"这个词.在我看来,到目前为止,"结构"一词的定义可以解释.
之前有人问过这个确切的问题,但我无法回答这个问题.为什么两个cond结构与列表的结构重合或不重合?在我看来,清单根本没有任何条件!
不是条件相当于Scheme中的问题吗?也许我误解了条件是什么,这可能是我沮丧的合理根源.无论如何,对此的任何澄清将非常感谢!谢谢!
scheme structure conditional-statements the-little-schemer racket