Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 有没有办法拒绝麻省理工学院计划的冗长?_Scheme_Mit Scheme - Fatal编程技术网

Scheme 有没有办法拒绝麻省理工学院计划的冗长?

Scheme 有没有办法拒绝麻省理工学院计划的冗长?,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

我最近决定开始使用麻省理工学院的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 '/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