簡體   English   中英

Clojure中的宏和函數

[英]Macros and functions in Clojure

我在這個Clojure教程中閱讀了以下內容 - http://java.ociweb.com/mark/clojure/article.html#Macros

'由於宏不評估它們的參數,可以將不帶引號的函數名稱傳遞給它們,並且可以構造帶參數的函數調用。 函數定義不能這樣做,而是必須傳遞包含函數調用的匿名函數。

如果它是正確的,那么為什么這是有效的,因為函數多維數據集不是匿名的 -

(defn something [fn x]
  (fn x))

(defn cube [x]
  (* x x x))

(something cube 4)

你是對的,這句話似乎不正確。 認為它試圖說的是你不能將看起來像函數調用的東西傳遞給一個不帶引號的函數:

(some-function (bla 1 2 3))

在這種情況下,(bla 1 2 3)將被計算為函數調用,返回值將被傳遞給某個函數。

(some-macro (bla 1 2 3))

在宏的情況下,傳遞的是列表 (bla 1 2 3) ,然后可以通過插入參數來構造新的函數調用,或者執行其他操作。

你可以肯定地將一個函數傳遞給你展示的另一個函數,這是一個完全記錄和預期的技術。

defn是s宏,代碼擴展為,因為你需要匿名函數:( (def something (fn [fn x] (fn x))) 我認為他指的是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM