我目前正在尝试使用 Microsoft 的 Bot Framework 编写聊天机器人。我想使用选择提示,但它不会等待我/用户选择一个选项。甚至这里的示例代码都不适合我。请参阅此工作示例:
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var bot = new builder.UniversalBot(connector);
bot.set('storage', …Run Code Online (Sandbox Code Playgroud) 因此,在练习中,我会得到一个类似的列表["xyz", True, 42].问题是,这是否是Haskell中的有效表达式以及该表达式的类型.
列表只能容纳同质的类型,但类型"xyz"是[Char],类型TrueIS Bool和的类型42是Num p => p.这是不同的类型,所以我不能把它们列入一个列表.
那正是我所想.但是这个练习的答案是"是的,它是一个有效的表达式.显示实例!".
为什么它是一个有效的表达式,虽然列表元素的类型不同,show-instance是什么意思?我正在考虑类似于面向对象语言的超类,但我认为这不是Haskell的工作方式.
我在这里找到了一些问题:重新定义monad list实例.我现在正试着把头包裹在monad周围.但是我需要一些帮助,我不会将列表的实例定义作为monad.
这是我给monad的列表实例的定义:
instance Monad [] where
xs >>= f = concat $ map f xs
return x = [x]
fail _ = []
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么我需要在bind-function中使用concat.这是我的定义(>>=):
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)
所以我有一些monadic值m a和一个函数,取一个值a并产生一个m b作为参数给出的monadic值.我' a从'进入' m a函数(a -> m b),因此得到一个monadic值m b.用我自己的话说:bind-operator (>>=)允许链接monadic函数(返回monadic值),其中早期函数的输出值是下一个函数的输入.对?
回到列表实例.在每个值上map f xs使用该函数.结果如此.这就是我想要的全部与否?我该怎么用?定义如下:fxsmap (*2) [1,2,3][2,4,6]concat …