关于Continuation的维基百科文章说:
"在任何支持闭包的语言中,都可以用连续传递方式编写程序并手动实现call/cc."
这是真的,我需要知道如何做或不是真的,这个陈述需要纠正.
如果这是真的,请告诉我如何在Lua中实现call/cc,因为我看不清楚如何.
我想我能够实现来电/立方厘米,如果手动Lua中有coroutine.clone功能解释在这里.
如果闭包不足以实现call/cc那么还需要什么呢?
以下文字是可选阅读.
PS:Lua与其协程表一次性延续.一个coroutine.clone函数允许我克隆它多次调用它,从而有效地使call/cc成为可能(除非我误解了call/cc).但是Lua中不存在克隆功能.Lua IRC频道上的某个人建议我使用Pluto库(它实现序列化)来编组协程,复制它然后解组它并再次使用它.虽然这可能会奏效,但我更感兴趣的是call/cc的理论实现,以及查找语言需要具有的实际最小特征集以便允许其手动实现.
编辑1:好的人,帮我在这里,这花了我很长时间,因为我不知道任何计划,但我想出了一些应该帮助我们的东西.请看下面的代码.第一个是Scheme中的程序,第二个是相同的程序,但在Lua中.
希望这会帮助我们.我相信我们非常接近.
PS:这些例子来自关于CallCC的维基百科文章的第一个例子.
方案版
(define call/cc call-with-current-continuation)
; callcc CPS-transformed (thanks to the people from the #scheme channel at freenode.net)
(define cpscallcc
(lambda (consumer k)
(let ((cc (lambda (result) (k result))))
(consumer cc k))))
; this is the continuation we will use to display the "returned" values
(define main-continuation
(lambda (result)
(display "--> ")
(display result)
(newline)))
; …Run Code Online (Sandbox Code Playgroud) 我在网上找到一些地方说Lua的操作员是多余的,但我似乎找不到任何例子.
有人可以提供一个例子,比如重载+运算符,就像..运算符用于字符串连接一样吗?
编辑1: 对Alexander Gladysh和RBerteig:
如果操作符重载只在两个操作数相同的类型下工作并且改变这种行为并不容易,那么下面的代码怎么工作呢?(我不是指任何冒犯,我刚开始学习这种语言):
printf = function(fmt, ...)
io.write(string.format(fmt, ...))
end
Set = {}
Set.mt = {} -- metatable for sets
function Set.new (t)
local set = {}
setmetatable(set, Set.mt)
for _, l in ipairs(t) do set[l] = true end
return set
end
function Set.union (a,b)
-- THIS IS THE PART THAT MANAGES OPERATOR OVERLOADING WITH OPERANDS OF DIFFERENT TYPES
-- if user built new set using: new_set = some_set + some_number
if type(a) == "table" and …Run Code Online (Sandbox Code Playgroud) 问题:
我想要代码:语法高亮(编程语言)
语言:C# 或汇编 x86(最好是 C#)
平台:Windows
资格:最有效的实现可能/最专业/像微软这样的大公司这样做的方式
改写:如何做我以目前已知的最有效的方式在 C# for Windows 中实现语法高亮?
详细说明(随意跳过 - 不需要回答问题 :)):
我不想要任何实现它的方式 - 我已经看过几个。
我想知道的是微软如何在 Visual Studio(无论哪个版本)上做得这么好。
当谈到语法高亮时,人们一直试图重新发明轮子。我不明白为什么。
这被认为是一个非常困难的问题吗?我见过只突出显示屏幕上当前显示内容的实现,我认为这是要走的路......(它使用了一些聪明的 API 来知道文本框的哪些行实际显示)。
我还看到了使用 RichTextBox 的实现,我认为这不是可行的方法(也许我在这里错了)-我认为将在常规文本框上绘制文本的例程子类化并更改其画笔可能会更好(也许我在某处看到过 - 我怀疑我自己会想到这一点)
另外我听说有些人用 AST 实现它就像编译器会被编码一样(我认为是词法分析器部分?) - 我希望那是矫枉过正 - 我认为这不是有效的。(没教养的猜测)
如果真的是一道难题,那么大部队怎么总能把它做好?例如,我从未听说过在 Visual Studio 中打破语法高亮的方法。
但是任何其他实现它的工具都做得很差,或者比大家伙更糟糕。
什么是官方的“这是最好的方法,任何其他方法效率都较低”的做法?
我真的没有任何证据表明微软的方式更好,但看到他们可能比其他任何人都更了解 Windows API,我猜想实现它的方式是最好的(我很想错 - 想象一下可以说我的语法高亮实现比 MS 更好!)
抱歉我的阐述不连贯。
另外,我提前为任何失礼道歉——这是我的第一个问题。
我有一个C#Windows窗体项目,其中包含一些C#代码.
问题:我如何拥有一个F#文件,我可以编写F#代码,但仍然引用我在Form1.cs上的所有C#代码(包括GUI).
我可以成功地做到这一点:
-创建一个C#Windows窗体项目
-创建一个F#库项目
-从我的C#项目中引用F#库DLL
-这样我可以从C#调用F#的功能
但我仍然无法看到来自F#的按钮和文本框
我理解那是因为它是一个库,它不能引用System.Windows.Forms
那么我该如何解决这个问题呢?我不希望它是一个库或这样或那样的,我只是希望它是一个文件,这将让我写F#代码,同时能够引用我的C#窗体和代码.
我想你可以说我想要一个F#文件也是一个"部分类Form1",这样我就可以继续为同一个Project编写代码,但是使用F#代替.我怎么做?