- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang cố gắng sử dụng Clojure để tạo động các hàm có thể áp dụng cho lượng lớn dữ liệu - tức là yêu cầu các hàm được biên dịch thành mã byte để thực thi nhanh, nhưng thông số kỹ thuật của chúng không được biết cho đến khi chạy.
Ví dụ: giả sử tôi sử dụng DSL đơn giản để chỉ định các chức năng, chẳng hạn như:
(def my-spec [:add [:multiply 2 :param0] 3])
Tôi muốn tạo một đặc tả biên dịch hàm:
(biên dịch-spec my-spec)
Sẽ trả về một hàm đã biên dịch với tham số x trả về 2x+3.
Cách tốt nhất để làm điều này trong Clojure là gì?
câu trả lời hay nhất
Hamza Yerlikaya đã đưa ra quan điểm quan trọng nhất, đó là mã Clojureluôn luônBiên dịch. Tôi vừa thêm hình minh họa và một số thông tin về một số thành quả dễ thực hiện cho nỗ lực tối ưu hóa của bạn.
Đầu tiên, điểm trên về việc mã Clojure luôn được biên dịch bao gồm các bao đóng được trả về bởi các hàm bậc cao hơn và chuyển fn
/Đã gọi trên fn*
form và bất kỳ thứ gì khác có thể hoạt động như một hàm Clojure. Do đó, bạn không cần DSL riêng để mô tả các chức năng, chỉ cần sử dụng các hàm bậc cao hơn (và có thể cả macro):đánh giá
Chức năng đã tạo
(định nghĩa hàm tạo affine [ab]
(fn [x] (+ (* ax) b)))
((make-affine-function 31 47) 5)
;
Mọi thứ sẽ thú vị hơn nếu thông số kỹ thuật của bạn bao gồm thông tin về các loại tham số, vì bạn có thể quan tâm đến việc viết macro để tạo mã bằng cách sử dụng các gợi ý loại này. Ví dụ đơn giản nhất tôi có thể nghĩ đến là một biến thể của ví dụ trên:
(defmacro make-primitive-affine-function [tab]
(let [cast #(list (ký hiệu (tên t))) %)
x (gensym "x")]
`(fn [~x] (+ (* ~(cast a) ~(cast x)) ~(cast b)))))
((make-primitive-affine-function :int 31 47) 5)
;
sử dụng:int
,:dài
,:trôi nổi
hoặc:gấp đôi
(hoặc ký hiệu không đủ điều kiện về không gian tên của tên tương ứng) làm đối số đầu tiên để sử dụng thuật toán nguyên thủy không được đóng hộp phù hợp với loại đối số của bạn. Tùy thuộc vào chức năng của bạn đang làm gì, điều này có thể mang lại cho bạn hiệu suất tăng rất đáng kể.
Các loại lời nhắc khác thường được đưa ra bởi #^Thanh Foo
Cú pháp được cung cấp (^Thanh Foo
làm điều tương tự trong 1.2); nếu bạn muốn thêm chúng vào mã được tạo macro, hãy xem xét với-meta
chức năng (bạn cần phải '{:tag Foo}
hợp nhất vào biểu tượng đại diện cho chức năng của bạn hoặc cho phép
Giới thiệu tham số chính thức của biến cục bộ nơi bạn muốn đặt gợi ý loại).
Ồ, và trong trường hợp bạn vẫn đang băn khoăn về cách thực hiện ý tưởng ban đầu của mình...
Bạn luôn có thể xây dựng các biểu thức Clojure để xác định hàm của mình-- (liệt kê 'fn ['x] (a-magic-function-to-generate-some-code some-args ...))
-- và gọi kết quảđánh giá
. Điều này sẽ cho phép bạn thực hiện những việc sau (sẽ đơn giản hơn nếu yêu cầu đặc tả chứa danh sách tham số, nhưng phiên bản ở đây giả định rằng bạn muốn trích xuất các tham số từ đặc tả, cả hai đều được gọi là thông sốFOO
và sắp xếp theo từ điển):
(yêu cầu '[clojure.walk :as walk])
(defn biên dịch-spec [spec]
(hãy [params (nguyên tử #{})]
(đi bộ/đi trước
(fn [mục]
(if (và (ký hiệu? item) (.startsWith (tên mục) "param"))
(làm (hoán đổi! params conj mục)
mục)
mục))
thông số kỹ thuật)
(eval `(fn [~@(sort @params)] ~@spec))))
(def my-spec '[(+ (+(* 31 param0) 47)])
((biên dịch-spec my-spec) 5)
;
Trong hầu hết các trường hợp, không có lý do chính đáng để làm mọi việc theo cách này và thay vào đó nên tránh sử dụng các hàm và macro bậc cao hơn. Nhưng nếu bạn đang làm điều gì đó như lập trình tiến hóa, thì nó sẽ ở đó, mang lại sự linh hoạt nhất - kết quả vẫn là một hàm được biên dịch.
Về java - tạo động các hàm hiệu suất cao trong clojure, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/2828239/
Tôi cần đặt văn bản vào một Div, trong một Div khác, trong một Div khác. Vì vậy, nó trông như thế này: #document Thay đổi mã PIN
Những điều kỳ lạ đã xảy ra. Tôi có một mã html cơ bản. html, đầu, thân. (Vì tôi nhận được một số lượt phản đối nên đây là mã đầy đủ) Đây là CSS của tôi: html { backgroun
Tôi đang cố tải một tập hợp hình ảnh từ Nội dung vào ImageView có trong UICollectionview nhưng bất cứ khi nào tôi chạy ứng dụng thì nó đều báo lỗi. Và cũng không có hình ảnh nào được hiển thị. Tôi đang ở ViewDidLoa
Tôi cần thay đổi một số biến môi trường dựa trên đầu ra của tập lệnh Perl có tham số. Trong tcsh, tôi có thể sử dụng lệnh bí danh để đánh giá kết quả đầu ra của tập lệnh Perl. tcsh: bí danh setsdk 'eval `/localhome/
Tôi đã tạo một ứng dụng Blazor (phía máy chủ) mới bằng Xác thực Windows và chạy nó bằng IIS Express. Nó sẽ hiển thị thông báo "Xin chào miền\Người dùng!" từ Ra sau ở trên cùng bên phải!
Đây là phương thức void login(Event event) của tôi; Tôi muốn biết cách thực hiện nó trong Kotlin. Câu trả lời hay nhất Trong Kotlin, toán tử ký tự đại diện là *. Nó báo cho trình biên dịch rằng nó chưa được biết, nhưng một khi đã biết thì không có lớp nào khác
Hãy xem đoạn mã sau cho câu chuyện trong sách nếu story.title.length < 140 - var story
Tôi đang cố gắng học xử lý chuỗi trong C. Tôi đã viết một chương trình lưu trữ một số bản nhạc và giúp người dùng kiểm tra xem bài hát mà họ nghĩ đến có tồn tại trong các bản nhạc được lưu trữ hay không. Điều này được thực hiện bằng cách yêu cầu người dùng nhập một chuỗi ký tự. Chương trình sau đó sử dụng strstr()
Tôi đang học sscanf và gặp chuỗi định dạng sau: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); Phần ] có nghĩa là quét cho đến khi gặp ':' và gán nó cho a. :
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
Tôi gặp tình huống muốn đưa các dòng hiện có từ tệp văn bản vào một khối mới. dòng 1 dòng 2 dòng trong khối dòng 3 dòng 4 sẽ trở thành dòng 1 dòng 2 dòng
Tôi có một dự án mới và tôi đang cố gắng thiết lập thanh công cụ gỡ lỗi Django. Trước tiên, tôi đã thử thiết lập nhanh, việc này chỉ đơn giản là thêm 'debug_toolbar' vào danh sách các ứng dụng đã cài đặt của tôi. Với điều này, khi tôi truy cập URL gốc của mình, việc gỡ lỗi
Trong Matlab, nếu tôi có hàm f, giả sử chữ ký là f(a,b,c), tôi có thể tạo một hàm chỉ có một biến b, biến này sẽ gọi f với a=a1 và c=c1 cố định: g = @(b) f(a1, b,
Tôi không hiểu tại sao lại có thêm khoảng cách dọc giữa các phần tử trong ForEach khi hiển thị các dải phân cách ngang tùy chỉnh bên trong VStack khi sử dụng GeometryReader bên trong ScrollView. Cuộn
Tôi đang tự hỏi, có hướng dẫn hoặc phương pháp hay nhất nào về thời điểm sử dụng phiên và cookie không? Những gì nên và không nên lưu trữ trong đó? Cảm ơn bạn! Câu trả lời hay nhất Những tài liệu này cung cấp sự hiểu biết tốt về các vấn đề bảo mật cookie phiên và
Tôi có ma trận Nx3 ở dạng scipy/numpy và tôi muốn sử dụng nó để tạo biểu đồ thanh 3 chiều, trong đó trục X và Y được xác định bởi các giá trị của cột thứ nhất và thứ hai của ma trận và chiều cao của mỗi thanh ở cột thứ ba của ma trận, số lượng thanh được xác định bởi N.
Giả sử tôi khởi tạo semaphore theo hai cách khác nhau sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) Bây giờ, sem_wait(&randomsem) trong cả hai trường hợp
Tôi nghi ngờ cách giá trị được lưu trữ trong "WORD" vì PStr chứa đầu ra thực tế. ? Vì Pstr lưu trữ chữ thường thành chữ in hoa, làm sao nó có thể được đưa ra dưới dạng "WORD" trong printf. Có ai có thể vui lòng không? Giải thích? #bao gồm
Tôi có một mảng 3x3: var my_array = [[0,1,2], [3,4,5], [6,7,8]];
Tôi nhận ra rằng bạn có thể dễ dàng kiểm tra tiêu điểm bằng cách sử dụng: var hasFocus = true; $(window).blur(function(){ hasFocus = false; });
Tôi là một lập trình viên xuất sắc, rất giỏi!