小编And*_*ton的帖子

功能相当于装饰模式?

什么是函数式编程相当于装饰器设计模式?

例如,您如何在功能样式中编写此特定示例

f# haskell design-patterns functional-programming clojure

40
推荐指数
5
解决办法
5629
查看次数

C函数调用中的默认参数提升

建立

在C语言中调用函数时,我有一些关于默认参数提升的问题.这里是6.5.2.2节"函数调用" C99标准(pdf)中的第6,7和8段(强调添加并分为列表以便于读):

第6段

  1. 如果表示被调用函数的表达式具有不包含原型的类型,对每个参数执行整数提升,并将具有类型的参数float提升为double.这些被称为默认参数促销.
  2. 如果参数数量不等于参数数量,则行为未定义.
  3. 如果使用包含原型的类型定义函数,并且原型以省略号(, ...)结尾或者促销后的参数类型与参数类型不兼容,则行为未定义.
  4. 如果使用不包含原型的类型定义函数,并且促销后的参数类型与促销后的参数类型不兼容,则行为未定义,但以下情况除外:
    • 一个提升类型是有符号整数类型,另一个提升类型是相应的无符号整数类型,并且该值可在两种类型中表示;
    • 这两种类型都是指向字符类型的限定或非限定版本的指针void.

第7段

  1. 如果表示被调用函数的表达式具有包含原型的类型,则将参数隐式转换为相应参数的类型,就像通过赋值一样,将每个参数的类型作为其声明的非限定版本类型.
  2. 函数原型声明符中的省略号表示法导致参数类型转换在最后声明的参数之后停止.默认参数提升是在尾随参数上执行的.

第8段

  1. 没有其他转换是隐式执行的; 特别是,参数的数量和类型不会与函数定义中不包含函数原型声明符的参数的数量和类型进行比较.

我知道的

  • 默认参数提升charshortint/ unsigned intfloatdouble
  • 变量函数(如printf)的可选参数受默认参数提升的约束

为了记录,我对函数原型的理解是这样的:

void func(int a, char b, float c);  // Function prototype
void func(int a, char b, float c) …
Run Code Online (Sandbox Code Playgroud)

c promotions prototype function

30
推荐指数
3
解决办法
1万
查看次数

从错误返回后释放内存的最佳方法是什么?

假设我有一个为调用者分配内存的函数:

int func(void **mem1, void **mem2) {
    *mem1 = malloc(SIZE);
    if (!*mem1) return 1;

    *mem2 = malloc(SIZE);
    if (!*mem2) {
        /* ... */
        return 1;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在第二个malloc()失败的情况下,我想听听你对free()分配内存的最佳方法的反馈.你可以想象一个更复杂的情况,有更多的错误退出点和更多分配的内存.

c memory malloc free

12
推荐指数
3
解决办法
2384
查看次数

Async.Parallel还是Array.Parallel.Map?

我正在尝试实现我从Don Syme的博客中读到的模式

(http://blogs.msdn.com/dsyme/archive/2010/01/09/async-and-parallel-design-patterns-in-f-parallelizing-cpu-and-io-computations.aspx)

这表明利用异步I/O可以大幅提升性能.我目前正在尝试使用Array.Parallel.Map以一种方式"工作"一段代码,看看我是否可以使用Async.Parallel以某种方式实现相同的结果,但我真的不明白Async.Parallel,并且无法获得任何工作.

我有一段代码(下面简化说明这一点)成功检索一个cusip的数据数组.(例如价格系列)

let getStockData cusip = 
    let D = DataProvider()
    let arr = D.GetPriceSeries(cusip)
    return arr

let data = Array.Parallel.map (fun x -> getStockData x) stockCusips
Run Code Online (Sandbox Code Playgroud)

因此,这种方法构建了一个数组阵列,通过互联网连接到我的数据供应商为每个股票(可能多达3000个)并返回一个数组(每个股票1个,每个股票的价格序列)一).我当然不明白Array.Parallel.map下面发生了什么,但是我想知道这是否是浪费资源的情况,并且它实际上可以更快地使用异步I/O?所以为了测试它,我试图使用asyncs来创建这个函数,我认为下面的函数遵循Don Syme使用URL的文章中的模式,但它不会使用"let!"进行编译.

let getStockDataAsync cusip = 
    async {  let D = DataProvider()
             let! arr = D.GetData(cusip)
             return arr
          } 
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:此表达式应该具有类型Async <'a>但这里有类型obj

它用"let"而不是"let!"来编译很好,但我认为整个问题是你需要感叹号才能使命令在不阻塞线程的情况下运行.

所以第一个问题确实是,上面我的语法有什么问题,在getStockDataAsync中,然后在更高的层次上,任何人都可以提供一些关于异步I/O的额外见解,以及我提出的场景是否会从中受益,使其潜在比Array.Parallel.map更快,更快?非常感谢.

f#

11
推荐指数
2
解决办法
3349
查看次数

#include标头在程序集文件中的C声明没有错误?

我有一个程序集文件(asm.S),它#define在C头文件(c_decls.h)中需要一个常量'd' .除了#define我想要的头文件包含C函数声明.不幸的是,gccbarfs在尝试编译汇编文件时.例如,

c_decls.h

#ifndef __c_decls_h__
#define __c_decls_h__

#define I_NEED_THIS 0xBEEF
int foo(int bar);

#endif
Run Code Online (Sandbox Code Playgroud)

asm.S

#include "c_decls.h"

.globl main
main:
    pushl %ebp
    movl %esp, %ebp
    movl $I_NEED_THIS, %eax
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

产量

> gcc -m32 asm.S
c_decls.h:汇编程序消息:
c_decls.h:6:错误:表达式
c_decls.h 之后的垃圾'(int bar)' :6:错误:后缀或操作数对'int'无效

有没有办法在#include包含程序集文件中的函数声明的C头文件?(更改标题或移动/重新定义#define不是一个选项.)

c x86 assembly gcc include

8
推荐指数
2
解决办法
1万
查看次数

NPM错误解析Json,意外令牌

我正在尝试安装grunt,但没有运气.

npm install -g grunt-cli --registry http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

npm ERR! registry error parsing json
npm ERR! Darwin 14.3.0
npm ERR! argv "node" "/usr/local/bin/npm" "install" "-g" "grunt-cli" "--registry" "http://registry.npmjs.org/"
npm ERR! node v0.12.4
npm ERR! npm  v2.10.1
npm ERR! Unexpected token <
npm ERR! <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
npm ERR! <html><head>
npm ERR! <title>404 Not Found</title>
npm ERR! </head><body>
npm ERR! <h1>Not Found</h1>
npm ERR! <p>The requested URL /grunt-cli was not found on this server.</p>
npm ERR! </body></html>
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

json node.js npm

7
推荐指数
2
解决办法
3万
查看次数

如何在Standard ML中打印多态值?

有没有办法在Standard ML(特别是SML/NJ)中打印多态值?我有一个多态函数,它没有做我想要的,并且由于在SML中调试的糟糕状态(参见调试生产函数程序的任何实际经验?),我想看看它在做什么好事 -噢print.一个简单的例子是(提示):

fun justThisOnce(x : 'a) : 'a = (print(x); x);
justThisOnce(42);
Run Code Online (Sandbox Code Playgroud)

其他建议表示赞赏.与此同时,我会一直盯着提交的违规代码.

更新

我能够找到这个错误,但问题仍然是希望防止未来的痛苦和痛苦.

printing polymorphism functional-programming sml

6
推荐指数
1
解决办法
933
查看次数

什么是表示无向图的良好数据结构?

我需要构建一个无向图.我不需要它做任何太花哨的事情,但理想情况下它会像这样工作:

structure UDG = UndirectedGraph
val g = UDG.empty
val g = UDG.addEdges(g, n1, [n2, n4, n7]) (* n1 is connected to n2, n4, and n7 *)
val g = UDG.addEdge(g, n2, n3)
UDG.connected(g, n2) (* returns [n1, n3] *)
Run Code Online (Sandbox Code Playgroud)

SML/NJ中是否有良好的数据结构来建模这些关系?我应该自己滚吗?

更新

我已经继续尝试滚动自己,但是当我尝试测试它时,我遇到类型不匹配错误.我对SML结构和仿函数的经验非常基础,所以我认为我做的事情显然是错误的.我如何让它工作?另外,你可以帮我做一个'a graph吗?从语义上看,这似乎更有意义.

signature ORD_NODE =
sig
  type node
  val compare : node * node -> order
  val format : node -> string
end

signature GRAPH =
sig
  structure Node : ORD_NODE
  type graph
  val empty …
Run Code Online (Sandbox Code Playgroud)

structure graph sml functor data-structures

6
推荐指数
1
解决办法
8669
查看次数

如何以编程方式使用Microsoft Word的拼写/语法检查程序?

我想使用拼写/语法检查器处理中到大量的文本片段,以获得粗略的近似值并对其"质量"进行排名.速度也不是真正令人担忧的,所以我认为最简单的方法是编写一个脚本,将片段传递给Microsoft Word(2007)并在其上运行拼写和语法检查.

有没有办法从脚本(特别是Python)执行此操作?学习如何以编程方式控制Word有什么好资源?

如果没有,我想我可以尝试使用开源语法检查器(SO).

更新

为了回应Chris的回答,至少有一种方法可以a)打开一个文件(包含代码片段),b)从Word内部运行一个调用拼写和语法检查器的VBA脚本,以及c)返回一些片段"得分"的指示?

更新2

我添加了一个似乎有效的答案,但如果有人有其他建议,我会保持这个问题一段时间.

python com ms-word word-2007 win32com

6
推荐指数
1
解决办法
3685
查看次数

为什么连接到我的VisualSVN服务器时,Jenkins SVN插件会显示错误E170001?

我对VisualSVN服务器的了解:它支持Windows Active Directory身份验证和使用我的Windows用户名和密码的“基本”身份验证。我可以成功使用TortoiseSVN,CollabNet和Mac OS X Subversion客户端。

要复制该错误,请执行以下操作:

  1. 安装Windows Jenkins软件包(版本1.616)
  2. 将SVN插件更新到2.5版。
  3. 创建一个自由式项目。
  4. 在“源代码管理”下,选择“ Subversion”。
  5. 输入存储库URL。
  6. 添加Windows用户名和密码作为凭据。

然后,我在“凭据”下面看到以下错误:

Unable to access https://<svn-server> : svn: E170001: Negotiate authentication failed: 'No valid credentials provided'

org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Negotiate authentication failed: 'No valid credentials provided'
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:62)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
    at org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication$1.run(DefaultHTTPNegotiateAuthentication.java:175)
    at org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication$1.run(DefaultHTTPNegotiateAuthentication.java:166)
    at org.tmatesoft.svn.core.internal.io.dav.http.DefaultHTTPNegotiateAuthentication.authenticate(DefaultHTTPNegotiateAuthentication.java:221)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:450)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:371)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:359)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:710)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:627)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:102)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:1032)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.testConnection(DAVRepository.java:94)
    at hudson.scm.SubversionSCM$DescriptorImpl.checkRepositoryPath(SubversionSCM.java:2282)
    at hudson.scm.SubversionSCM$ModuleLocation$DescriptorImpl.checkCredentialsId(SubversionSCM.java:3043)
    at hudson.scm.SubversionSCM$ModuleLocation$DescriptorImpl.doCheckCredentialsId(SubversionSCM.java:3016)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

svn visualsvn-server jenkins jenkins-plugins

6
推荐指数
1
解决办法
1万
查看次数