我最近决定通过跟随SICP中的示例开始玩麻省理工学院计划。我从Ubuntu存储库安装了方案。
sudo apt-get install mit-scheme
给定一个如下所示的输入文件:
486
(+ 137 349)
(- 1000 334)
(* 5 99)
(/ 10 5)
(* 25 4 12)
我运行方案如下。
scheme < Numbers.scm
它产生以下输出。
MIT/GNU Scheme running under GNU/Linux
Type `^C' (control-C) followed by `H' to obtain information about interrupts.
Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Image saved on Sunday February 7, 2016 at 10:35:34 AM
Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/x86-64 4.118 || Edwin 3.116
1 ]=> 486
;Value: 486
1 ]=> (+ 137 349)
;Value: 486
1 ]=> (- 1000 334)
;Value: 666
1 ]=> (* 5 99)
;Value: 495
1 ]=> (/ 10 5)
;Value: 2
1 ]=> (* 25 4 12)
;Value: 1200
1 ]=>
End of input stream reached.
Moriturus te saluto.
这个输出感觉过分,所以我现在正在削减它。
scheme < Numbers.scm | awk '/Value/ {print $2}
486
486
666
495
2
1200
是否有一种本地方法可以减少方案的冗长程度,因此我可以在不诉诸外部流程的情况下获得类似上述输出的内容?
我检查了scheme --help
的输出,但没有找到任何明显的选项。
请注意,将文件名作为参数传递似乎不适用于MIT-Scheme。
scheme Numbers.scm
MIT/GNU Scheme running under GNU/Linux
Type `^C' (control-C) followed by `H' to obtain information about interrupts.
Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Image saved on Sunday February 7, 2016 at 10:35:34 AM
Release 9.1.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/x86-64 4.118 || Edwin 3.116
;Warning: Invalid keyword: "Numbers.scm"
;Warning: Unhandled command line options: ("Numbers.scm")
1 ]=>
答案 0 :(得分:1)
作为解决方法,
scheme Numbers.scm
但也许您将其作为脚本文件而不是stdin流运行?不确定MIT Scheme调用,比如
(display)
虽然通过这种方式,您必须使用<mat-form-field>
<mat-select placeholder="Select User Type" [(ngModel)]="selectedUserType" (change)="selectUserType()">
<mat-option *ngFor="let user of userTypeList" [value]="user">
{{ user.description }}
</mat-option>
</mat-select>
</mat-form-field>
或其他内容明确打印出结果,否则它们将被忽视。
答案 1 :(得分:1)
你走了:
scheme --quiet < Numbers.scm
现在这将完全抑制REPL,除非发生错误,因此不会显示未明确显示的内容。例如。评估(+ 2 3)
返回5
,但由于您没有告诉它打印,因此不打印。您需要使用display
之类的程序来打印信息,或者返回使用REPL,其唯一目的是显示结果。
我本来希望你能做到:
scheme --quiet --load Numbers.scm
但它不会在文件后退出,并且添加--eval (exit)
有REPL询问您是否要退出。
修改强>
(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