0

TinySchemeを使用します。

私は自分のコードをファイルに書いています(ここでは50%で解決しました:tinyschemeでファイルに書き込む方法は?):

(with-output-to-file "biophilia.c"
  (lambda ()
    (write code)
    ))
; and segmentation fault comes here

ただし、コードは""qotesと\n\ rをそのまま使用して記述されるため、改行に変換されません。

私はそれがで見えるようにコードを書く必要があります(display code)

たとえば、ラケットのドキュメントにはprintfがありますが、TinySchemeの実装にはprintfがないようです。おそらく、printfを検出(コードを追加)する必要がありますか?

4

2 に答える 2

1

あなたは試すことができます:

(call-with-output-file "biophilia.c" 
    (lambda (port) 
        (write-string code port)))

提供される「コード」は文字列です。エスケープを削除し、プレーンテキストとして書き込みます。

于 2015-05-10T23:39:38.280 に答える
0

解決策が見つかりました。唯一の修正は、put-charをwrite-charに変更することです。

  (define assert
    (lambda (aa msg)
      (if (null? aa)
    #t
    (if (not (car aa))
      (error msg)
      (assert (cdr aa) msg))))) 

 (display "define fprintf\n\r")
(define (fprintf port f . args)
   (let ((len (string-length f)))
     (let loop ((i 0) (args args))
       (cond ((= i len) (assert (null? args)))
         ((and (char=? (string-ref f i) #\~)
           (< (+ i 1) len))
          (dispatch-format (string-ref f (+ i 1)) port (car args))
          (loop (+ i 2) (cdr args)))
         (else
          (write-char (string-ref f i) port)
          (loop (+ i 1) args))))))

(display "define printf\n\r")
(define (printf f . args)
   (let ((port (current-output-port)))
     (apply fprintf port f args)
     (flush-output-port port)))

    (display "writing to output file biophilia.c\n\r")
    (with-output-to-file "biophilia.c"
      (lambda ()
        (printf code)
        ))

コードはもはやセグメンテーション違反ではありません

しかし、ファイルの最後に:エラー:(:25)十分な引数がありません

于 2012-06-06T07:08:11.770 に答える