输出变量值到新文件
output variable value to new file
目前我有以下代码:
(define (write host code)
(with-output-to-file host
(lambda ()
(printf code))))
(let ([myself (find-system-path 'run-file)]
[test (substring myself 1 3)])
(printf "~s\n" myself)
(write "hello.txt" myself))
我正在尝试写入变量 "myself" 的值。抱歉,我是个菜鸟,我不是函数式语言的忠实拥护者。
错误:
printf: contract violation
expected: string?
given: #<path:C:\Program Files\Racket\DrRacket.exe>
所以我假设我必须自己将变量转换为字符串?我在这里很困惑,我只知道perl/python
等OOP语言
问题不在于 printf
:
> (printf "~s\n" (find-system-path 'run-file))
#<path:/Users/soegaard/racketgithub/racket/racket/bin/../DrRacket.app/Contents/MacOS/DrRacket>
问题是substring
。 substring
函数需要一个字符串作为输入,并在获取路径时给出错误。
您可以让 printf
像这样限制输出的长度:
> (parameterize ([error-print-width 20])
(printf "~.s\n" (find-system-path 'run-file)))
#<path:/Users/soe...
注意 ~.s
中的点。
不过也可以把路径转成字符串,然后用substring
.
> (substring (~a (find-system-path 'run-file)) 0 20)
"/Users/soegaard/rack"
目前我有以下代码:
(define (write host code)
(with-output-to-file host
(lambda ()
(printf code))))
(let ([myself (find-system-path 'run-file)]
[test (substring myself 1 3)])
(printf "~s\n" myself)
(write "hello.txt" myself))
我正在尝试写入变量 "myself" 的值。抱歉,我是个菜鸟,我不是函数式语言的忠实拥护者。
错误:
printf: contract violation
expected: string?
given: #<path:C:\Program Files\Racket\DrRacket.exe>
所以我假设我必须自己将变量转换为字符串?我在这里很困惑,我只知道perl/python
等OOP语言问题不在于 printf
:
> (printf "~s\n" (find-system-path 'run-file))
#<path:/Users/soegaard/racketgithub/racket/racket/bin/../DrRacket.app/Contents/MacOS/DrRacket>
问题是substring
。 substring
函数需要一个字符串作为输入,并在获取路径时给出错误。
您可以让 printf
像这样限制输出的长度:
> (parameterize ([error-print-width 20])
(printf "~.s\n" (find-system-path 'run-file)))
#<path:/Users/soe...
注意 ~.s
中的点。
不过也可以把路径转成字符串,然后用substring
.
> (substring (~a (find-system-path 'run-file)) 0 20)
"/Users/soegaard/rack"