我是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初学者,并试图理解基于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页.
我试图编写一个接受函数和两个输入的函数,并返回最大化函数的参数.这是我想要使用的设置:
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)
这种方法似乎并没有起作用.感谢您的任何帮助!
我想得到一个特定区域中所有实例的简单列表,每个记录应包括id,ARN和实例名称.我试过用了
ec2 describe-instances --region us-east-1
Run Code Online (Sandbox Code Playgroud)
但是在输出中找不到ARN.
我正在尝试在 Wikidata 上运行 SPARQL 查询,但它超时了。我想下载转储并将其索引到某个数据库中,以便我可以使用 HTTP 请求运行本地 SPARQL 查询。我还需要支持特定于维基数据的扩展,如SERVICE wikibase:label
. 我已经下载了一个 RDF 转储。什么是下一步?
我正在试验入口点并且遇到了段错误.
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) 我正在尝试使用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))
,但我想知道为什么原来不起作用.
我想匹配不开始的子串$
.例如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) 我是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) 我想使这个功能无点,以简化它.我明确地传递长度而不是计算它,因为我还需要它用于其他函数,并且我只想计算它一次.我已经设法摆脱目标字符串参数,但与其他两个挣扎.
-- 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) 这是一个类似的问题这一个,即给定字符串的开始和结束索引,用另一个字符串替换它,但我想,以取代使用指标数子.我不能只链接替换,因为索引引用原始字符串.所以我最终计算了字数,但必须有更好的方法.
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)