- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我认为这不能称为“定点递归”,因为它太简单了。然而,我最近意识到它实际上可能是。
我是否有效地实现了定点递归?
这里是有问题的函数:
/* recursive kleisli fold */
var until = function(f) {
return function(a) {
return kleisli(f, until(f))(a);
};
};
这里有一些额外的上下文:
// The error monad's bind
var bind_ = function(f, m) { return m.m === Success ? f(m.a) : m; };
var bind = function(f, m) {
return m !== undefined && m.m !== undefined && m.a !== undefined ? bind_(f, m) : m;
};
var kleisli = function(f1, f2) {
return function(a) {
return bind(f2, f1(a));
};
};
剩下的代码是đây ,但上面的代码片段应该足以跟进。
câu trả lời hay nhất
定点组合器的定义是一个函数F
,它接受一个函数nếu
并返回一个函数P
,这样
给定 F(f) = p
Sau đó p = f(p)
可以编写许多可能的定点组合器。不要因为直截了当而认为某物不是定点组合器;这是 JavaScript 中的标准定义,非常简单:
var fix = function(f) {
return function(x) {
return f(fix(f))(x)
}
};
一个用法可能是计算阶乘的定点,使用:
var fact = function(f) {
return function(n) { return (n == 0) ? 1 : (n * f(n - 1)) }
};
alert(fix(fact)(7)); // alerts us with 5040.
有关不同定点组合器(Y 组合器)的示例,请参阅 this helpful blog post .
让我们看看您的 until
组合器是否计算定点。由于您正在使用 monadic 函数,因此定点定义略有变化以处理 monadic 结构,其中 F
是一个(monadic)定点组合器,当
给定 F(f) = p
Sau đó p = f* 。 p
TRONG f* 。 p
表示函数 P
与函数 nếu
的 Kleisli 组合(在您的代码中,您将编写此 kleisli(p, f)
,您可以将 *
视为 ràng buộc
)。我将使用这种表示法,因为它比编写 JavaScript 更短。
然后让我们展开 until
的定义,看看我们得到了什么:
until(f) = (until(f))* . f
= (until(f)* . f)* . f
= ((... . f)* . f)* . f
= ... . f* . f* . f (associativity of bind for a monad: (g* . f)* = g* . f*)
= p
是否 p = f* 。 p
?
... . f* . f* . f =?= f* . ... . f* . f* . f
是的-我相信是这样。虽然我不认为这是一个有用的固定点。 (恐怕我对此还没有很好的论据 - 但我认为这基本上是一个最大的固定点,它只会发散)。
在我看来,until
ở giữa kleisli
的参数似乎应该被交换。也就是说,我们希望在 fix
示例中执行 Kleisli 等效应用程序,因此我们需要将递归调用 until(f)
的单子(monad)结果传递给 nếu
:
var until = function(f) {
return function(a) {
return kleisli(until(f), f)(a);
};
};
让我们展开 until
的新定义:
until(f) = f* . until(f)
= f* . (f* . until(f))
= f* . f* . ...
= p
是否 p = f* 。 p
?是的:
f* . f* ... = f* . (f* . f* . ...)
因为将 f* 的另一个组合添加到 f* 组合的无限链上是相同的函数。
使用您的 kleisli
函数我遇到了一些发散问题(一些评估发生得太快,所以计算一直运行到我用完堆栈空间为止)。相反,以下内容似乎对我有用:
var until = function(f) {
return function(a) {
return bind(f,until(f)(a));
};
};
有关单子(monad)代码定点的更多信息,您可能想查看 the work of Erkök and Launchbury .
关于javascript - 这是定点组合器的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821019/
Thông tin cơ bản: Gần đây tôi đã làm việc với JPA và rất ấn tượng với sự dễ dàng mà tôi có thể tạo lớp lưu giữ lâu dài cho một dự án cơ sở dữ liệu quan hệ khá lớn. Công ty chúng tôi sử dụng nhiều cơ sở dữ liệu không phải SQL, đặc biệt là cơ sở dữ liệu hướng cột. Tôi có ý tưởng về việc có thể sử dụng JPA với các cơ sở dữ liệu này
Tôi đã thêm các cấu hình bản dựng này vào maven pom của mình vì tôi muốn kết hợp các phần phụ thuộc Apache Solr với Jar. Nếu không tôi nhận được SolarServerException: ClassNotF
giao diện ITurtle { void Fight(); void EatPizza(); } giao diện ILeonardo : ITurtle {
Tôi hy vọng rằng một trong các công cụ ánh xạ đối tượng/quan hệ (ORM) có sẵn cho Java sẽ đáp ứng các yêu cầu sau: sử dụng JPA hoặc truy vấn SQL gốc để lấy số lượng lớn hàng và trả về chúng dưới dạng đối tượng thực thể. Cho phép lặp qua các hàng (thực thể) và thực hiện thao tác hiện tại
Có vẻ như là không, vì tôi có mã triển khai From for, tôi có thể chuyển đổi A thành B bằng .into(), nhưng điều tương tự không hoạt động với Vec .into() a Vec. Hoặc là tôi đã làm hỏng điều gì đó. ngăn cản việc triển khai nguồn gốc, Hoặc điều này không nên được đăng
Trong C#, nếu A triển khai IX và B kế thừa từ A, thì có nhất thiết phải tuân theo B triển khai IX không? Nếu vậy thì có phải do LSP không? Có sự khác biệt nào giữa: 1. Giao diện IX Loại A : IX;
Như hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi hy vọng câu trả lời sẽ được hỗ trợ bởi các sự kiện, trích dẫn hoặc chuyên môn, nhưng câu hỏi có thể gây ra tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi đang đọc mã triển khai của (^) từ thư viện haskell tiêu chuẩn: (^) :: (Num a, Integral b) => a -> b -> a x0 ^ y0 | triển lãm x0
Tôi sẽ biểu diễn trò chơi cờ vua dưới dạng cấu trúc C++. Theo tôi, lựa chọn tốt nhất là cấu trúc cây (vì ở mỗi độ sâu, chúng ta có thể thực hiện một số bước di chuyển). Đây có phải là một cách tiếp cận tốt? cấu trúc TreeElement{SomeMoveType
Tôi đang triển khai thuật toán khớp chuỗi cho cơ sở dữ liệu tên người dùng. Cách tiếp cận của tôi lấy cơ sở dữ liệu tên người dùng hiện có và tên người dùng mới mà người dùng muốn, sau đó kiểm tra xem tên người dùng đó đã được sử dụng chưa. Nếu được lấy, phương thức sẽ trả về tên người dùng với một số không được lấy từ cơ sở dữ liệu. Ví dụ: “Gia
Tôi đang cố triển khai thuật toán tìm kiếm theo chiều rộng để tìm khoảng cách ngắn nhất giữa hai đỉnh. Tôi đã phát triển một đối tượng Hàng đợi để lưu và truy xuất các đối tượng và tôi có một mảng 2D để lưu hai đỉnh đã cho
Tôi hiện đang phát triển trò chơi Python của mình bằng ika, sử dụng python 2.5 và tôi quyết định sử dụng tính năng tìm đường A* cho AI. Tuy nhiên, tôi thấy nó quá chậm so với nhu cầu của mình (3-4 kẻ thù có thể sẽ tụt lại phía sau trò chơi, nhưng tôi muốn cung cấp 4-
Tôi đang tìm cách triển khai mã nguồn mở của Kademlia cho bảng băm phân tán trong C/C++. Nó phải nhẹ và đa nền tảng (win/linux/mac). Nó phải có khả năng xuất bản thông tin lên DHT và truy xuất nó. Câu trả lời hay nhất OpenDHT là
Tôi đọc được dòng này trong một cuốn sách: - "Khi chúng tôi yêu cầu triển khai C++ chạy một chương trình, nó sẽ thực hiện bằng cách gọi hàm này." Và tôi muốn biết "triển khai C++" nghĩa là gì hoặc cụ thể là gì. giúp đỡ!? Câu trả lời hay nhất "triển khai C++" đề cập đến trình biên dịch cộng với liên kết
Tôi đang cố gắng triển khai vấn đề về chiếc ba lô này bằng cách sử dụng C++ phân nhánh và ràng buộc. Có một phiên bản Java trên trang này: Triển khai nhánh và ràng buộc cho ba lô Tôi đang cố gắng in phiên bản C++ của mình
Có nhiều tình huống mà tôi cần quyền truy cập vào thuật toán băm phù hợp trong C#, từ ghi đè GetHashCode đến thực hiện so sánh/tra cứu nhanh trên dữ liệu. Tôi thấy băm FNV là một thuật toán băm rất đơn giản/tốt/nhanh. Tuy nhiên, tôi chưa bao giờ thấy triển khai C#
Ý tưởng cốt lõi của chiến lược thay thế bộ đệm LRU thư mục không thể áp dụng thuật toán kịch bản triển khai cơ bản tối ưu hóa thuật toán
1. Giới thiệu Trong bài trước chúng tôi đã đề cập đến sự chuyển đổi lẫn nhau của các hệ tọa độ hình chữ nhật trong không gian Khi chuyển đổi tọa độ đo đạc và lập bản đồ, tình huống thường gặp là: chuyển đổi góc nhỏ của hai hệ tọa độ hình chữ nhật. Đây là những gì chúng ta thường sử dụng trong xử lý dữ liệu khảo sát và bản đồ, hệ tọa độ WGS-84, hệ tọa độ 54 Bắc Kinh
Trong quá trình phát triển phần mềm, đôi khi chúng ta cần thường xuyên kiểm tra dữ liệu trong cơ sở dữ liệu và kích hoạt hành động khi tìm thấy dữ liệu mới. Để hiện thực hóa yêu cầu này, chúng tôi tiến hành trình diễn đơn giản trong .Net 7. PeriodicTimer.
Tìm kiếm nhị phân Thuật toán tìm kiếm nhị phân, nói một cách thẳng thắn, là đưa ra một khóa giá trị tồn tại trong mảng theo một mảng có thứ tự, sau đó so sánh nó với giá trị giữa của mảng trước. thực hiện phép so sánh tiếp theo sau đường giữa cho đến khi tìm được. Nếu bằng nhau thì có thể đạt được vị trí của nó.
Tôi là một lập trình viên xuất sắc, rất giỏi!