这似乎完全自然的,我认为发电机,其功能非常像数组,应该支持非常基本的列表操作,如map(),filter()和reduce()。我错过了什么吗?
我为map它编写了代码,看起来很简单,但是将所有函数嵌入所有生成器中会更好:
let fancyGen = g => {
let rv = function*() {
for (let x of g)
yield x;
}
rv.map = function*(p) {
for (let x of g)
yield p(x);
}
return rv;
}
Run Code Online (Sandbox Code Playgroud)
我是生成器的新手,因此欢迎对代码提出任何意见。特别是,这是编写“身份生成器”的最佳方式吗?
我已经看到了代码,其中只有两个相当静态的元素被映射,例如具有开始和结束日期的时间间隔,但是map()正在使用而不是用于映射的显式代码,例如
{ map { ... } qw(start end) } # vs.
{ start => ..., end => ... }
Run Code Online (Sandbox Code Playgroud)
哪种方式更受欢迎,为什么?
该map形态可能不那么简洁,但看起来更多的功能(如函数式编程),所以我想这就是为什么它可能优于明确的代码也许是更加干燥.
但是,它对我来说看起来不太清晰,因为后面有更多的逻辑,并且映射也应该效率较低,因为它调用a调用并包含更多的原子操作.
编辑
在编程中存在一个相互矛盾的目标:KISS(保持它{选择2来自:小,简单,愚蠢}).使用map稍微复杂的代码.
我正在阅读关于es2015的一些内容,在我遇到这段代码时尝试了箭头语法的一些示例:
var odds = evens.map(v => v + 1);//I understand
var nums = evens.map((v,i) => v + i);//I don't understand
Run Code Online (Sandbox Code Playgroud)
与evens初始化为[0,2,4,6]我得到[1,3,5,7]的odds,我明白了.
但是我不明白第二个表达式的结果[0,3,6,9].基本上我不理解i在第二个例子中为变量分配了什么值.任何人都可以对此有所了解吗?
我需要一个只在每个其他元素上映射函数的函数,例如
(f inc '(1 2 3 4))
=> '(2 2 4 4)
Run Code Online (Sandbox Code Playgroud)
我提出了:
(defn flipflop [f l]
(loop [k l, b true, r '()]
(if (empty? k)
(reverse r)
(recur (rest k)
(not b)
(conj r (if b
(f (first k))
(first k)))))))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现这一目标?
写一个 randomStringGenerator() 函数,我想出了这个:
private let characters = ("0123456789" + "abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ").characters.map{ $0 }
private func generateRandomChar() -> Character {
let index = Int( arc4random_uniform( UInt32( characters.count)))
return characters[index]
}
func generateRandomString(lenght: Int) -> String {
var string = ""
for _ in 0..<lenght {
string.append(generateRandomChar())
}
return string
}
Run Code Online (Sandbox Code Playgroud)
请注意我使用的第二行"0123...".characters.map{$0},我对这个(工作)语法的使用感到困惑。绘制地图而不执行任何操作是什么意思?是否有用于相同目的的更解释性语法?
我有一堆单词,有些可能有也可能没有错别字。
potentialWords = ["hello", "lkasjdf", "hunry"]
Run Code Online (Sandbox Code Playgroud)
我想要做的是,返回所有有效单词的数组,以及那些能够使用我创建的函数自动更正的单词correctWord。它返回一组潜在的匹配项。所以"hunry"可能会回来["hungry", "hurry"]。我将选择第一个索引以获得最佳猜测。
然而有些话是无法纠正的!例如"lkasjdf"不会找到任何更正,但"hunry"会。
我正在尝试类似的东西:
potentialWords.map {
if correctWord($0) != nil {
return correctWord($0)[0]
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这会抱怨并说我需要在 if 子句之外返回。我可以根据单词是否可以更正来过滤列表,然后映射过滤后的列表,重新检查哪些单词需要更正,但是这种correctWord功能方式运行次数太多,并且非常敏感。
我希望能够进行一次传递,并返回所有有效单词的数组,以及更正的单词。
PScorrectWord为简洁起见,我在 map 函数中调用了两次,但当然我会分配correctWord($0)给一个变量,然后如果它不是 nil,则取第一个索引并将其添加到新列表中。
是否可以将 map 与带有多个参数的函数一起使用?
我想重复使用 map 的第二个和第三个参数作为函数的参数。如
mapF x y z = map (f y z) [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
因此,它会评估f与同y和z的值,但x = 1,x = 2,x = 3等等。
haskell list partial-application higher-order-functions map-function
我正在尝试在 jQuery 的map函数中使用箭头函数。使用以下 titlesText 是正确的长度,但每个字符串都是空的:
let titles = $(panelBody).find('h4');
let titlesText = $(titles).map(title => $(title).text());
Run Code Online (Sandbox Code Playgroud)
我的 ES6 转译工作正常,jQuery 工作正常。有任何想法吗?
这是给出的问题:下表中的前8个元素是什么?
mystery = 0 : 10 : (map(+1)mystery)
Run Code Online (Sandbox Code Playgroud)
答案是 [0,10,1,11,2,12,3,13...]
但我认为答案应该是[0,10,1,11,1,11,2,12]。以下步骤显示了原因:
1)我们得到了; list,[0,10]因此在第一次应用该函数后,我们有了列表[ 0,10,1, 11]
2)现在有了一个列表[ 0,10,1,11]因此,在再次应用该函数后,结果列表应该是[0,10,1,11,1,11,2,12]
显然不是这样。谁能解释为什么?
我有一个 Haskell 问题,我想出了一个解决方案,但我就是不能把笔写在纸上。
基本上我有一个函数calc,它接受一个Int并返回一个Float.
calc :: Int -> Int -> Float
Run Code Online (Sandbox Code Playgroud)
在我的函数中,g我想将此函数应用于数组
g :: [Int] -> [Float]
Run Code Online (Sandbox Code Playgroud)
由于calc需要两个Int参数,我想消耗两个Ints(
x作为数组的第一个索引和x+1第二个索引)。这将继续在(数组索引)[1][2], [2][3], [3][4]等上重复该函数。
calc :: Int -> Int -> Float
Run Code Online (Sandbox Code Playgroud)
我试过在网上研究如何使用map,它基本上是这样说的?知道为什么代码不想编译,x+1甚至是可行的吗?
map-function ×10
haskell ×3
javascript ×2
list ×2
swift ×2
arrays ×1
callback ×1
clojure ×1
ecmascript-6 ×1
filter ×1
generator ×1
iterator ×1
jquery ×1
perl ×1
reduce ×1