2012-09-29 15 views
1

我要聲明一個函數,它的功能(該功能還需要一個元素作爲參數),並在方案我如何可以聲明一個函數,在函數將作爲參數方案

列表作爲參數但是是行代碼給我錯誤 (定義(函數funct(x),l)

+0

好的:你看到的錯誤是什麼?查看錯誤消息內容並查看是否有任何可理解的內容通常很有幫助。此外,請參閱http://www.ccs.neu.edu/home/matthias/HtDP2e/part_three.html以瞭解可以使用函數的函數的示例。 – dyoo

+0

define:不是標識符,默認標識符,或過程參數的關鍵字:(x) – John

+0

因此,編譯器試圖說在這一點上,定義中存在語法錯誤,它可能接近*(x)* 。見JoãoSilva的答案;他或她展示了一個例子。基本上,如果你正在寫一個帶參數的函數,不管這些參數是什麼,你都給每個參數一個普通的名字:沒有其他特殊的語法是必要的。 *(define(func arg1 arg2 ... argN)...)* *無論arg *是什麼類型的東西。 – dyoo

回答

1

在Scheme中,函數是first-class citizens。因此,您可以將函數作爲參數傳遞給另一個函數,就像你與任何其他符號。沒有關於function關鍵字

For exa mple,定義一個名爲map接受一個函數作爲參數,並將其應用到列表中的每個成員函數,你可以使用:

(define (map f l) 
    (if (null? l) 
     l 
     (cons (f (car l)) (map f (cdr l))))) 

然後,如果你有一個功能叫做add1,你想傳遞給map

(define (add1 x) 
    (+ x 1)) 

(map add1 '(1 2 3)) 

其結果將是(2 3 4)

DEMO

0

Scheme不允許您在函數定義中指定參數類型。你能做的最好的是

(define my-func(func . args) 

,這將給你在FUNC參數的第一個參數和所有其餘的在列表中ARGS。然後,在將其應用於參數之前,您可以檢查** func **的類型(如果需要)。

(cond 
    ((procedure? func) (func args)) 
    (else (report some kind of error however you want))) 
相關問題