我一直在阅读关于组合器的信息,看看它们有多大用处(例如,在Haskell的Parsec中).我的问题是,我不太确定如何实际使用它们.
以下是问题的概述:可以生成,过滤和修改分布.可以组合分布以创建新的分布.
基本接口是(伪Haskell类型术语):
generator:: parameters -> distribution
selector:: parameters -> (distribution -> distribution)
modifier:: parameters -> (distribution -> distribution)
Run Code Online (Sandbox Code Playgroud)
现在,我认为我看到了三个组合器:
combine:: generator -> generator -> generator
filter:: generator -> selector -> generator
modify:: generator -> modifier -> generator
Run Code Online (Sandbox Code Playgroud)
这些实际上是组合器吗?组合器是否有意义/是否还有其他明显的组合器我缺少?
谢谢你的建议.
haskell functional-programming combinators higher-order-functions
关于哪个代码签名标识我应该在构建配置中使用哪个场景我都不清楚,如果有人能用最简单的方式解释它,我会很高兴.
这就是我所知道的:
我在Provisioning Portal中创建并在我的应用程序中实现开发配置文件和分发配置文件.

然后我根据不同的配置文件分配Project >> Build Settings >> Code Signing:

这是第一个问题:发布和发布有什么区别?哪一个应连接到Developer配置文件,哪一个应连接到Distribution配置文件?

我需要通过选择以下代码签名标识来定义构建配置,这有5个不同的步骤:

这是大问题...... 在哪种情况下我应该选择哪个代码签名标识?
我总是在同样的2台设备上运行应用程序:我的iPhone和iPad; 两者都在Provisioning Portal中定义并设置到配置文件中.我只想确保运行它可以在Simulator和Device上进行测试,然后再构建应用程序以便上传到App Store.
任何协助/指示将不胜感激.
我已经通过Don Stewart的滚动你自己的IRC机器人教程,我正在玩它的一些扩展.我现在的代码基本上与"monadic,有状态,异常处理机器人的所有荣耀"相同; 除非有人要求,否则粘贴在这里有点太长了.
作为康卡斯特的用户,特别重要的是机器人能够在连接不良之后重新连接.我的方法是简单地计算PING来自服务器的请求,如果它没有看到一段PING时间,则尝试重新连接.
到目前为止,我发现的最佳解决方案是hGetLine将listen循环包裹起来System.Timeout.timeout.但是,这似乎需要定义一个自定义异常,以便catchin main可以main再次调用,而不是return ().为每个人指定超时值似乎也很脆弱hGetLine.
有没有更好的解决办法,或许还有一个包装了IO a像bracket,并catch让整个主可以处理网络超时,无新的异常类型的开销?
我正在尝试为我的应用程序实现自定义URL方案.我为Info.plist添加了必要的行.在调用指定的url(例如:myapp://)后,应用程序启动.
如果我想处理URL,我发现了以下步骤:
@interface EventHandler : NSObject {
}
@end
@implementation EventHandler
- (id)init {
self = [super init];
if (self) {
NSLog(@"eventHandler::init");
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(applicationDidFinishLaunching:)
// name:NSApplicationWillFinishLaunchingNotification
name:NSApplicationDidFinishLaunchingNotification
object:nil];
}
return self;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
NSLog(@"%@", url);
}
@end
Run Code Online (Sandbox Code Playgroud)
如果应用程序正在运行,上面的代码正常工作,但如果调用URL并终止应用程序,则不会捕获该事件.我认为这是因为:NSApplicationDidFinishLaunchingNotification.将其更改为NSApplicationWillFinishLaunchingNotification会导致捕获到非事件.也许Qt在我之前处理它,但我找不到解决问题的方法.
我试图找出最简洁的方法来修改嵌套在Maybe类型(或其他类型的建模偏好)内的值.
以下是示例设置:
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data Outer = Outer { _inner :: Maybe Inner }
deriving (Show)
data Inner = Inner { _foo :: Int }
deriving (Show)
makeLenses ''Outer
makeLenses ''Inner
Run Code Online (Sandbox Code Playgroud)
通过以下方式以一种混乱的方式执行此操作非常容易lens:
wibble :: Outer -> Maybe Outer
wibble o = do i <- view inner o
let i' = over foo succ i
return $ set inner (Just i') o
Run Code Online (Sandbox Code Playgroud)
为了说明为什么这是令人讨厌的,这是我想要写的:
wibble' :: Outer -> Maybe Outer
wibble' = overish inner.foo …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要从持久存储(可能是JCR)处理DITA文档的Web应用程序.该DITA开放工具包是唯一的DITA实现我所知道的,但它需要您所有的文件到文件系统中存在.理想情况下,我喜欢像DITA OT一样的东西,但允许你提供一个解析器(很像XSLT URIResolver)来从其他来源提取引用的内容.
如果人们有其他想法,比如使用虚拟文件系统来欺骗DITA OT,我也很乐意听到.谢谢!
编辑:我忘了在原帖中提到我正在寻找一个开源解决方案,因为这是针对在教育社区许可下发布的项目.
我正在为Haskell开发一个跨平台的Zeroconf/Bonjour/DNS-SD库,并且认为我最好的选择是定位dns_sd.hAPI.在Linux下,此接口的实现由Avahi提供,Avahi声称支持Bonjour API的一个子集.
作为我的库的健全性检查,我在C中编写了一个小型测试程序,它只使用了API的基础.它浏览网络上的任何类型的服务_http._tcp,一看到它就打印一条消息,然后死掉:
#include <dns_sd.h>
#include <stdio.h>
#include <stdlib.h>
void cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
DNSServiceErrorType errorCode,
const char *serviceName,
const char *regtype,
const char *replyDomain,
void *context) {
printf("called!\n");
}
int main() {
DNSServiceRef sd = malloc(sizeof(DNSServiceRef));
const char *regtype = "_http._tcp";
DNSServiceErrorType err1 = DNSServiceBrowse(&sd, 0, 0, regtype, NULL, &cb, NULL);
printf("err1=%d\n", err1);
DNSServiceErrorType err2 = DNSServiceProcessResult(sd);
printf("err2=%d\n", err2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的Mac上,这个测试程序在C和等效的Haskell中都运行良好(它找到了我的打印机;令人兴奋!):
$ gcc test.c -o …Run Code Online (Sandbox Code Playgroud) 这是很容易表达and,or和not在以下方面if(与从本地绑定协助or)。我想知道反过来是否正确。我天真的第一次尝试:
(if test conseq altern) => (or (and test conseq) altern)
Run Code Online (Sandbox Code Playgroud)
但是,如果test是非#f并且conseq是#f,则翻译评估为altern,这是不正确的。
在保持 的短路特性的同时,是否存在评估为正确值的翻译if?
我在集合 U 中有 n 个元素(假设由大小为 n 的数组表示)。我想找到所有可能的方法将集合 U 分成两个集合 A 和 B,其中 |A| + |B| = n。
例如,如果 U = {a,b,c,d},组合将是:
请注意,以下两种情况被视为相等,只应计算一种:
情况 1:A = {a,b} -- B = {c,d}
情况 …
背景:我有一个用寄存器建模芯片的类,芯片有一堆寄存器,其中一个是内置温度传感器的高温限制.
我有以下内容:
class foo():
def __init__(self):
# does not set self._hiTemp!
...
def setHiTemp(self, t):
self._hiTemp = t
def getHiTemp(self):
return self._hiTemp
def checkHiTemp(self):
return self._temp > self._hiTemp
Run Code Online (Sandbox Code Playgroud)
我不申报的原因self._hiTemp在__init__是因为用户可能不关心芯片的温度感测功能.用户可以以不同的方式使用芯片,并且赋予该变量无意义的值没有意义.但是,如果用户在self._hiTemp没有先设置的情况下尝试使用,则使用未声明变量的错误比一些模糊错误(如比较数字和无(或者在某些情况下甚至根本没有错误)更容易调试/回溯).
这一切都很好,直到我开始pylint,当然我得到W0201:在init之外定义的属性几乎无处不在.我只是想知道这种编码风格是否令人不满,如果是这样,"Pythonic方式"是什么.
谢谢
很难让这个问题变得简洁,但是为了提供一个最小的例子,假设我有这种类型:
{-# LANGUAGE GADTs #-}
data Val where
Val :: Eq a => a -> Val
Run Code Online (Sandbox Code Playgroud)
这种类型让我愉快地构建以下异构外观列表:
l = [Val 5, Val True, Val "Hello!"]
Run Code Online (Sandbox Code Playgroud)
但是,唉,当我写下一个Eq实例时,事情就出错了:
instance Eq Val where
(Val x) == (Val y) = x == y -- type error
Run Code Online (Sandbox Code Playgroud)
啊,我们Could not deduce (a1 ~ a).完全正确; 定义中没有任何内容表示x并且y必须是相同的类型.事实上,重点是允许它们不同的可能性.
让我们Data.Typeable进入混合,只有尝试比较两者,如果他们碰巧是相同的类型:
data Val2 where
Val2 :: (Eq a, Typeable a) => a -> Val2
instance Eq Val2 where
(Val2 …Run Code Online (Sandbox Code Playgroud) 这段代码在"Clojure的喜悦"中讨论了Clojure中的命名参数:
(defn slope [& {:keys [p1 p2] :or {p1 [0 0] p2 [1 1]}}]
(float (/ (- (p2 1) (p1 1))
(- (p2 0) (p1 0)))))
(slope :p1 [4 15] :p2 [3 21])
Run Code Online (Sandbox Code Playgroud)
函数本身,我理解它 - 解构没有问题 - 但我不理解调用.
我们是否将四个论点传递给斜率?如何将矢量分配给:p1和:p2?