8

我试图通过在命令行上创建 Notational Velocity 样式 find-as-you-type 文件搜索来掌握 Haskell 的基础知识。我没有解决整个问题,而是尝试了一个非常基本的版本:存在一个包含 10 行的文件,每行一个 3 个字母的单词。在我输入每个字母后,我想根据我目前的输入更新可能包含我正在输入的单词的行号列表的显示。

有人可以演示一个 Haskell 程序吗?我认为我的问题在于强制重新评估每个字符输入。提前一百万谢谢。

4

2 回答 2

2

我不会尝试编写您要求的整个 Haskell 程序,但这里有一个非常简短的示例,显示您目前声称坚持的一点:每次按键后都做一些事情。我们不会做任何令人兴奋的事情(只是敲一个数字并将其打印出来),但它会展示如何完成一项小任务,您也许可以从那里开始进行黑客攻击。

您真正需要知道的唯一一件事是您可以关闭输入上的行缓冲。

import System.IO

loop n = do
    c <- getChar
    print n
    -- do whatever recalculation you need to do here, using
    -- n (which can be more complicated than an Integer, as
    -- it is here, of course) and c (which is a Char
    -- representing the key the user whacked)
    -- our recalculation is just to increase n by one
    loop (n+1)

main = do
    hSetBuffering stdin NoBuffering -- do this once before anything else
    loop 0
于 2013-03-09T14:40:01.710 回答
1

学习反应式编程可能是一个好的开始。
为此,一个好的库似乎是响应式香蕉
有一些基本示例

如果您想了解更多关于 FRP 的信息,堆栈上的优秀主题将为您提供清晰的概述。

于 2013-03-09T11:55:34.803 回答