2016-11-06 93 views

回答

1

是的,這是棘手的。問題是如何format應該知道它有所有的論點。我猜你希望格式能解析它的輸出字符串並確定它需要多少個參數,然後在接收到正確數量的參數時觸發。你將自己捲起來。類似的東西(注意:未經測試的代碼):

#lang racket 

;; given a format-string, return a curried function that 
;; accepts the format-string's arguments one at a time 
(define (curried-format fmt-str) 
    (define num-args-expected (count-format-string-args fmt-str)) 
    (define (so-far->waiter so-far) 
    (lambda (arg) 
     (define new-args (cons arg so-far)) 
     ;; do we have all of the args? 
     (if (= (length new-args) num-args-expected) 
      ;; yay! call format: 
      (apply format fmt-str (reverse new-args)) 
      ;; nope: wait for some more: 
      (so-far->waiter new-args)))) 
    (so-far->waiter '())) 
+0

這個,這很重。我猜想爲了格式化和打印/寫入字符串的目的,這樣的方法將起作用。不過,我很好奇,如果你不知道這個函數會帶來多少個參數呢?在目前的柯里語法規則下,甚至可能會出現這種情況嗎? – podington

+0

咖喱功能怎麼知道什麼時候開火? –

+0

這就是爲什麼我不認爲它會起作用。我希望可以通過'(define(f。l)...)'語法來處理,你可以使用任意數量的參數,你可以使用'apply'在列表中調用一個函數。 – podington

相關問題