我试图通过fluxus获得一些乐趣,但它的手册和在线文档似乎都假设读者已经是一位从未听说过Scheme的专家网络程序员.因此,您会获得试图解释前缀表示法基础知识的段落,但假设您知道如何将声卡数据传输到程序中,或者设置并连接到OSC进程.
那里有没有相反的教程吗?IE,假设您已经掌握了Lisp/Scheme的功能,但在正确设置声源或OSC服务器之前需要一些指针?
除此之外,有没有人知道如何获得(例如)连接到(fluxus)的系统麦克风,或者如何让它从磁盘播放声音文件?
在SICP 1.2.1中,有一个函数可以生成一个有理数,如下所示:
(define (make-rat n d)
(let ((g (gcd n d)))
(cons (/ n g) (/ d g))))
Run Code Online (Sandbox Code Playgroud)
我只是好奇你如何使用lambda而不是let来实现相同的东西,而不需要两次调用GCD.我自己无法理解.
是否有可能在Windows中使用mit方案作为简单的编译器(不运行Edwin)?
我想在我选择的wditor中编辑代码并编译它,但我没有找到并选择这样做.
当我执行...
mit-scheme < file.scm
Run Code Online (Sandbox Code Playgroud)
......我得到一个窗口:
"找不到选项的可读默认值--band.
在这些目录中搜索文件all.com:
c:\ local\mit-scheme"
我正在学习我的方式,我对语言的构建方式特别感兴趣.我试图找到一个很好的描述Scheme实现的核心语法.我对标准知之甚少,但我认为它们都包含宏系统.如果没有,我想阅读一个包含宏的标准(它们不可能在更简单的Scheme结构中实现,可以吗?).
有没有人对Scheme方言所需的最小语法有很好的参考?
只是一个更新:
我也偶然发现了这个问题:http://matt.might.net/articles/compiling-to-java/#sec1.如果你也添加define-syntax
,delay
那么它似乎是一个良好的开端.
在R5RS规范中,以下页面似乎是我正在寻找的:正式语法
我想要一个命令行(必须是一个命令行!)read-eval-print-loop Scheme解释器.但从表面上看,我想要一个解释器,至少可以突出括号,甚至可能保留历史,如GNU readline启用的程序.所有这些都在REPL级别.
这存在吗?它甚至可能吗?我是否必须将其破解为一些开源的REPL?我只是擅长电脑吗?我应该打扰吗?
我已经检查了其他问题,但我还没有找到我正在寻找的东西.我已经尝试过Racket和mzscheme,但它似乎没有做我想要的.现在我正在使用mit-scheme,但是这种平衡功能(就像他们在SICP演讲中使用的任何程序一样)几乎都是我想要的.
我讨厌使用SO作为查找简单函数的方法,但我真的找不到这样的函数:
给出一个列表(1 2 3 4 5),我想要相当于(PHP的,Perl的,Python的)
$a = array(1, 2, 3, 4, 5);
$a[3] = 100;
Run Code Online (Sandbox Code Playgroud)
结果如何(1 2 3 100 5)
谢谢!
假设我想在除s-expression中第一项之外的其他内容上触发Scheme宏.例如,假设我想define
用中缀样式替换:=
,以便:
(a := 5) -> (define a 5)
((square x) := (* x x)) -> (define (square x) (* x x))
Run Code Online (Sandbox Code Playgroud)
实际的转变似乎非常简单.诀窍是让Scheme找到:=
表达式并对它们进行宏扩展.我已经考虑过围绕使用带有标准宏的中缀语法的大部分代码,可能是:(with-infix-define expr1 expr2 ...)
和标准宏遍历其主体中的表达式并执行任何必要的转换.我知道如果我采用这种方法,我必须小心避免转换实际上应该是数据的列表,例如引用列表和quasiquoted列表的某些部分.我想象的一个例子:
(with-infix-define
((make-adder n) := (lambda (m) (+ n m)))
((foo) :=
(add-3 := (make-adder 3))
(add-6 := (make-adder 6))
(let ((a 5) (b 6))
(+ (add-3 a) (add-6 b))))
(display (foo))
(display '(This := should not be transformed))
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是双重的:
with-infix-define
条路线,我是否必须注意除引号和准引号之外的任何绊脚石?我正在使用DrRacket的列表缩写的开头语言,并希望递归地制作一个powerset但是无法弄清楚如何去做.我现在有这么多
(define
(powerset aL)
(cond
[(empty? aL) (list)]
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很好.
在Scheme中创建switch语句最聪明的方法是什么?
我想检查一个值与其他几个值,如果一个结果为true,则整个函数应该为真,否则为false.我对方案中的语法不是很了解.
我正在将一个Python脚本移植到Racket作为学习经验,我有这个功能:
(define (check-status)
(define git [find-executable-path "git"])
(define-values (ckot out in err)
(subprocess #f #f #f git "checkout" "-q" "master"))
(define-values (local lout lin lerr)
(subprocess #f #f #f git "rev-parse" "@"))
(define-values (remote rout rin rerr)
(subprocess #f #f #f git "rev-parse" "@{u}"))
(define-values (merge-base mbout mbin mberr)
(subprocess #f #f #f git "merge-base" "@" "@{u}"))
(display-lines (port->lines mbout))
(define ports '(ckot out in err local lout lin lerr remote rout rin rerr merge-base mbout mbin mberr))
(map (lambda …
Run Code Online (Sandbox Code Playgroud)