我試圖做一個函數,定義一個矢量,根據函數的輸入而變化,並設置!在Scheme中很有用。 OCaml中有這個功能嗎?OCaml中是否存在與「set!」相同的函數?在計劃?
回答
我同意sepp2k你應該擴大你的問題,並給出更詳細的例子。
也許你需要的是參考文獻。
作爲一個粗略的估計,你可以看到他們的變量可以給它分配:
let a = ref 5;;
!a;; (* This evaluates to 5 *)
a := 42;;
!a;; (* This evaluates to 42 *)
這裏是http://caml.inria.fr/pub/docs/u3-ocaml/ocaml-core.html更詳細的解釋:
的語言,我們已經如此描述遠遠是純粹的功能。也就是說,對同一個表達式的幾次評估總會產生相同的答案。例如,這可以防止計數器的實現,該計數器的接口是單個函數next : unit -> int
,遞增計數器並返回其新值。重複調用此函數應返回一系列連續的整數 - 每次都有不同的答案。
實際上,計數器需要記住它在某個特定位置的狀態,並具有讀/寫訪問權限,但最重要的是,必須在兩次調用之間共享某些信息。解決方案是使用可變存儲,並通過所謂的副作用與商店進行交互。
在OCaml中,計數器可以被定義如下:
let new_count =
let r = ref 0 in
let next() = r := !r+1; !r in
next;;
另一個,也許更具體的,例如可變存儲的是一個銀行帳戶。在OCaml中,記錄字段可以聲明爲可變的,以便以後可以爲它們分配新的值。因此,銀行賬戶可以是兩場記錄,其數量和餘額,其餘額是可變的。
type account = { number : int; mutable balance : float }
let retrieve account requested =
let s = min account.balance requested in
account.balance <- account.balance -. s; s;;
事實上,在OCaml中,引用不是原始的:它們是可變記錄的特例。例如,可以定義:
type 'a ref = { mutable content : 'a }
let ref x = { content = x }
let deref r = r.content
let assign r x = r.content <- x; x
這正是我正在尋找的!謝謝! – Balthasar
set!
在Scheme中賦值給一個變量。根本不能在OCaml中分配變量。 (所以「變量」並不是真的「可變的」)。所以沒有相應的東西。
但OCaml不是一種純粹的功能語言。它有可變的數據結構。下面的事情可被分配給:
- 數組元素
- 字符串元素
- 記錄易變字段
- 對象
在這些情況下的可變的多個領域,<-
語法用於分配。
@jrouquie提到的ref
類型是一種簡單的內置可變記錄類型,它充當一個可變容器。 OCaml還提供!
和:=
運營商與ref
s合作。
- 1. 是否存在與SQL Server NewId()函數相同的Access?
- 2. 是否存在與Marklogic相同的liquibase
- 3. 是否有與SBCL的運行計劃等同的計劃?
- 4. 在opencv中是否有與matlab conv2相同的函數?
- 5. SQL Server視圖執行計劃:是否與UNION相同?
- 6. 是否存在與下劃線(_)連續相反的內容?
- 7. 在OCaml中,是否可以根據Set定義Map?
- 8. 是否存在與C++ std :: setw(int)函數相當的Ruby?
- 9. 是否存在與__import__相當的__reload__函數?
- 10. 測試函數是否與已知函數的行爲相同
- 11. DrRacket中是否有相當於set-car!和set-cdr!在SICP?
- 12. 計劃在析構函數
- 13. 回調函數是否與嵌套函數相同?
- 14. 在cookie解析器和會話中存儲的secret set是否與express.js中的相同?
- 15. 該計劃在URI中是否可選?
- 16. Matlab中是否存在函數緩存?
- 17. PostgreSQL在相同的查詢上接近計劃緩存?
- 18. super()和this()是否出現在相同的構造函數中?
- 19. 是否存在與gitosis相當的Mercurial?
- 20. 存儲器中的整數是否與對象相同?
- 21. 計劃任務是否以與網頁相同的方式加載Application.cfc?
- 22. 在python中是否有與MATLAB函數bsxfun相當的功能?
- 23. 是否存在與jQuery的scrollTo相同的YUI 2.x?
- 24. Thrust中是否存在boost計算函數的類比?
- 25. C中的函數參數是否總是具有相同的內存地址?
- 26. 檢查函數是否與C中的typedef函數類型相同?
- 27. 是否ocaml memoize遞歸函數
- 28. 什麼是與MySQL命令「SET NAMES utf8」具有相同動作的PHP函數?
- 29. 如何檢查兩個數組中是否存在與php相同的值
- 30. 如何確定雞計劃中是否存在變量?
你的意思是'set!'或'vector-set!'?如果你的意思是'set!',你能描述一下你在描述的場景中如何使用'set!'? – sepp2k
我的意思是「set!」什麼,我試圖做會去像這樣一個簡單的例子: (定義四個 4) (定義五(設4 5)!) – Balthasar
^^^所以現在「四個一」被設定爲5 – Balthasar