小编dim*_*mid的帖子

在haskell中添加函数定义的LHS参数的语义是什么?

我是haskell的初学者,并试图了解Let vs Where wiki页面.最后有一个例子,x在函数定义的左侧添加参数会fib改变语义.

fib1 =
   let fib' 0 = 0
       fib' 1 = 1
       fib' n = fib1 (n - 1) + fib1 (n - 2)
   in  (map fib' [0 ..] !!)

fib2 x =
   let fib' 0 = 0
       fib' 1 = 1
       fib' n = fib2 (n - 1) + fib2 (n - 2)
   in  map fib' [0 ..] !! x
Run Code Online (Sandbox Code Playgroud)

维基页面声明"在第二种情况下[ fib2],为每个参数x"重新定义了fib'.我正在寻找一个初学者友好的解释为什么会发生这种情况,一般来说,是否有更多这样隐藏的副作用?

维基页面还有一个关于eta减少的解释的链接,该解释表明表达式和它的eta减少是等价的.那么,如果fib2是eta抽象fib1,为什么它们不等同?

haskell functional-programming lambda-calculus

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

什么是哈斯克尔的lambda单位?

我是一个haskell初学者,并试图理解基于StateMonad的计数器的这个定义.我知道lambda通常有变量,例如

(\n -> n + 1)
Run Code Online (Sandbox Code Playgroud)

是一个接受参数的函数,将n其值递增1,然后返回结果.但是,在这种情况下,而不是变量,有一个值,一个空元组(单位).

tick :: StateMonad Int Int
tick = fetch >>= (\n -> store (n + 1) >>= (\() -> return n))
Run Code Online (Sandbox Code Playgroud)

它是从Generalising Monads到Arrows的第5页.

lambda haskell

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

根据功能最大化

我试图编写一个接受函数和两个输入的函数,并返回最大化函数的参数.这是我想要使用的设置:

max :: Eq a => (a -> Int) -> a -> a -> a 
Run Code Online (Sandbox Code Playgroud)

例如,该函数应该如下工作:

maximize (+3) 5 10 = 10
Run Code Online (Sandbox Code Playgroud)

因为(3 + 5)<(3 + 10)

我想我需要做这样的事情:

maximize :: Eq a => (a -> Int) -> a -> a -> a
maximize f x y = max (f x) (f y)
Run Code Online (Sandbox Code Playgroud)

这种方法似乎并没有起作用.感谢您的任何帮助!

haskell

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

使用AWS CLI获取实例的名称和ARN列表

我想得到一个特定区域中所有实例的简单列表,每个记录应包括id,ARN和实例名称.我试过用了

ec2 describe-instances --region us-east-1
Run Code Online (Sandbox Code Playgroud)

但是在输出中找不到ARN.

amazon-web-services aws-cli

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

如何创建本地维基数据查询服务?

我正在尝试在 Wikidata 上运行 SPARQL 查询,但它超时了。我想下载转储并将其索引到某个数据库中,以便我可以使用 HTTP 请求运行本地 SPARQL 查询。我还需要支持特定于维基数据的扩展,如SERVICE wikibase:label. 我已经下载了一个 RDF 转储。什么是下一步?

rdf dump sparql wikidata

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

Bash:只读关联数组,可以修改但不能扩展

我想用一组键和值初始化一个数组,这样值可以更改,但不能添加新键。

bash

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

gcc:使用nostdlib进行编译时出现分段错误

我正在试验入口点并且遇到了段错误.

prog.c中:

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译和链接:

 gcc -Wall prog.c -nostdlib -c -o prog.o
 ld prog.o -e main -o prog.out
Run Code Online (Sandbox Code Playgroud)

objdump的:

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
0 .text         0000000b  00000000004000b0  00000000004000b0  000000b0  2**2
              CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .eh_frame     00000038  00000000004000c0  00000000004000c0  000000c0  2**3
              CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .comment      0000001c  0000000000000000  0000000000000000  000000f8  2**0
              CONTENTS, READONLY

Disassembly of section .text:
00000000004000b0 <main>:
 4000b0:    55                      push   %rbp
 4000b1:    48 89 e5                mov …
Run Code Online (Sandbox Code Playgroud)

c linker gcc segmentation-fault

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

具有自定义值类型的std :: unordered_map,operator []

我正在尝试使用std :: unordered_map,如此处的示例所示.

class CSVRecord {
public:
    CSVRecord(string csvLine) : _fields(vector<string>()) {...}
    vector<string> _fields; 
};

int main(int argc, char* argv[]) {
    unordered_map<string, CSVRecord> m;
    CSVRecord rec = CSVRecord("test");
    m["t"] = rec;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,m["t"] = rec 给出一个错误:no matching function for call to ‘CSVRecord::CSVRecord()’.

我使用了m.insert(pair<string, CSVRecord>("t",rec)),但我想知道为什么原来不起作用.

c++ stl unordered-map map c++11

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

正则表达式中的整个单词,不以美元符号开头

我想匹配不开始的子串$.例如b a b应该匹配,但b $a b不应该匹配.我试过用:

/\b(?![$])a\b/
/\b(?!\$)a\b/
/\b(?=[^$])a\b/
Run Code Online (Sandbox Code Playgroud)

但都匹配b $a b.我知道我可以split通过空格,并str.starts_with? '$'在每个元素上使用,但我想知道为什么正则表达式不起作用.

编辑:我正在寻找一个正则表达式:

'b $a b' =~ <regex>
=> nil
'b a b' =~ <regex>
=> 2
Run Code Online (Sandbox Code Playgroud)

将用于full_str.gsub(<regex>, 'c')屈服:

'b a b'.gsub(<regex>, 'c')
=> 'b c b'
'b $a b'.gsub(<regex>, 'c')
=> 'b $a b'
'b a b $a b'.gsub(<regex>, 'c')
=> 'b c b $a b'
Run Code Online (Sandbox Code Playgroud)

ruby regex

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

仅在haskell中的函数内键入匹配项

我是haskell的初学者,并试图实现自然数字的Church编码,如本指南中所述.

{-# LANGUAGE RankNTypes #-}

newtype Chur = Chr (forall a. (a -> a) -> (a -> a))

zero :: Chur
zero = Chr (\x y -> y)

-- church to int
c2i :: Chur -> Integer
c2i (Chr cn) = cn (+ 1) 0

-- this works
i1 = c2i zero
-- this doesn't
i2 = zero (+ 1) 0
Run Code Online (Sandbox Code Playgroud)

因为i2我得到了类型不匹配:

Couldn't match expected type ‘(Integer -> Integer) -> Integer -> t’
            with actual type …
Run Code Online (Sandbox Code Playgroud)

haskell

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

使这个功能默认

我想使这个功能无点,以简化它.我明确地传递长度而不是计算它,因为我还需要它用于其他函数,并且我只想计算它一次.我已经设法摆脱目标字符串参数,但与其他两个挣扎.

-- Cycle with respect to whitespace (currently only spaces).
-- Given a source string and its length, and a longer target string
-- (which may contain spaces) match the source to target such that:
-- 1. both will have the same length
-- 2. spaces in the target string will remain spaces
-- 3. chars from the source string will be cycled
--
-- Example:
-- src: "ALLY", len: 4
-- target: "MEET AT DAWN"
-- Result: "ALLY AL …
Run Code Online (Sandbox Code Playgroud)

haskell pointfree

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

在ruby中一次用索引替换几个子串

这是一个类似的问题这一个,即给定字符串的开始和结束索引,用另一个字符串替换它,但我想,以取代使用指标数子.我不能只链接替换,因为索引引用原始字符串.所以我最终计算了字数,但必须有更好的方法.

res = original_string
delta = 0
# to keep things simple, assume replacements just contains objects which have start, end indices and replacements
replacements.each do |r|
  old_str = original_str[r.start_offset .. r.end_offset]
  new_str = r.replacement
  res[r.start_offset + delta .. r.end_offset + delta] = new_str
  delta += new_str.size - old_str.size
end
Run Code Online (Sandbox Code Playgroud)

ruby

-1
推荐指数
1
解决办法
42
查看次数