Scheme 有没有办法拒绝麻省理工学院计划的冗长?
我最近决定开始使用麻省理工学院的Scheme,并附上了SICP中的例子。我从Ubuntu存储库安装了schemeScheme 有没有办法拒绝麻省理工学院计划的冗长?,scheme,mit-scheme,Scheme,Mit Scheme,我最近决定开始使用麻省理工学院的Scheme,并附上了SICP中的例子。我从Ubuntu存储库安装了scheme sudo apt-get install mit-scheme 给定一个如下所示的输入文件: 486 (+ 137 349) (- 1000 334) (* 5 99) (/ 10 5) (* 25 4 12) 我的计划如下 scheme < Numbers.scm 这个输出感觉太多了,所以我现在就这样减少它 scheme < Numbers.scm | awk
sudo apt-get install mit-scheme
给定一个如下所示的输入文件:
486
(+ 137 349)
(- 1000 334)
(* 5 99)
(/ 10 5)
(* 25 4 12)
我的计划如下
scheme < Numbers.scm
这个输出感觉太多了,所以我现在就这样减少它
scheme < Numbers.scm | awk '/Value/ {print $2}
486
486
666
495
2
1200
作为解决办法
scheme < Numbers.scm | gawk '/^;Value: / { sub(/^;Value: /, ""); print }'
尽管这样,您必须使用(display)
或其他方法显式打印结果,否则它们会被忽略。给您:
scheme --quiet < Numbers.scm
但它不会在文件和添加--eval(exit)
后退出,如果您想退出,它会发出REPL ask
编辑
(define (displayln v)
(display v)
(newline)
v)
(displayln (+ 4 5))
; ==> 9, in addition you get the side effect that "9\n" is written to current output port
您也可以制作一个宏来执行此操作:
(define-syntax begin-display
(syntax-rules ()
((_ form ...) (begin (displayln form) ...))))
(begin-display
486
(+ 137 349)
(- 1000 334)
(* 5 99)
(/ 10 5)
(* 25 4 12))
; ==> 1200. In addition you get the side effect that "486\n486\n666\n49\n2\n1200\n" is written to current output port
似乎将文件名作为参数传递对于此版本的scheme不起作用;请参阅问题更新。
方案-f编号。scm
<代码>人工智能计划,然后是/script
或/file
?我没有安装它,所以我无法在这里帮助您。为了完整性,请显示对数字的修改。scm
需要在此模式下实际显示输出。我必须使用(display(string append(number->string 486)“\n”)
在自己的行上显示表达式的值,但如果您有更简单的方法,我很想学习。@merlin2011我添加了一些例子。请注意,由于displayln
返回其参数,因此您可以在任何地方使用它。例如,(+(displayln(*4 5))34;=>54,但也打印了20
scheme --quiet < Numbers.scm
scheme --quiet --load Numbers.scm
(define (displayln v)
(display v)
(newline)
v)
(displayln (+ 4 5))
; ==> 9, in addition you get the side effect that "9\n" is written to current output port
(define-syntax begin-display
(syntax-rules ()
((_ form ...) (begin (displayln form) ...))))
(begin-display
486
(+ 137 349)
(- 1000 334)
(* 5 99)
(/ 10 5)
(* 25 4 12))
; ==> 1200. In addition you get the side effect that "486\n486\n666\n49\n2\n1200\n" is written to current output port