简单博客

随缘

你你我我随缘曾邂逅,笑笑喊喊想起总荒谬。

Go Iter

Go range over func #

Play

// You can edit this code!
// Click here and start typing.
package main

import (
	"fmt"
	"iter"
)

func count(n int) iter.Seq[int] {
	return func(yield func(int) bool) {
		for i := range n {
			if !yield(i) {
				break
			}
		}
	}
}

// Tree is a binary tree.
type Tree[E any] struct {
	val         E
	left, right *Tree[E]
}

// All may be used in a for/range loop to iterate
// through all the values of the tree.
// This implementation does an in-order traversal.
func (t *Tree[E]) All(yield func(E) bool) {
	t.doAll(yield)
}

// doAll is a helper for All, to make it easier
// to know when the iteration stopped in a subtree.
func (t *Tree[E]) doAll(yield func(E) bool) bool {
	if t == nil {
		return true
	}
	return t.left.doAll(yield) && yield(t.val) && t.right.doAll(yield)
}

func SumTree(t *Tree[int]) int {
	s := 0
	for v := range t.All {
		s += v
	}
	return s
}

func SumTreeSeq(seq iter.Seq[int]) int {
	s := 0
	for v := range seq {
		s += v
	}
	return s
}

func main() {
	fmt.Println("Hello, 世界")

	// 函数body会被转为yield函数传入到iter.Seq里 -- 当`body`没有控制流语句时,一律视为`return true`
	for k := range count(10) {
		// 请注意,这里的defer不会被移入yield函数里,而是会保留在本函数内
		defer func() {
			fmt.Println("defer2", k)
		}()
		defer fmt.Println("defer", k)

		fmt.Println(k)
	}

	t := &Tree[int]{
		val:   2,
		left:  &Tree[int]{val: 1},
		right: &Tree[int]{val: 3},
	}
	r := SumTree(t)
	fmt.Println(r, SumTreeSeq(t.All))
}

range over func的defer说明

...

卷积

如何通俗易懂地解释卷积? - 1335的回答

  1. 作用速度

  2. 作用效果

一个对象(本文中的吃冰淇凌)对一个系统(本文中的体重)的作用效果满足线性原理、累加原理。

该对象对这个系统连续作用了一段时间后,求该系统的状态。

这个时候,一个卷积就可以求出来了!

在卷积 W(T)=integral(g(τ)f(T−τ), 0, T) 中,

第一个函数 表示这个对象对系统的作用速度。

第二个函数 表示当作用速度为单位冲击函数时这个对象对系统的作用效果。

强度

竞技:主动/被动地在极短时间内将强度提高。

恩威

恩威、奖惩、权责

无威不听,无恩不动。

阳奉阴违,变本加厉。

权利

在别人攻城略地的同时,选择步步退让,自我安慰再让一步就会好起来。

求实务虚

求实,则新变化从容应对;

务虚,则大祸临无所适从。

漠视

对它,对他,对她,对TA;

对己,对挤,对急,对纪。

矛盾

个性化必然导致矛盾,

自然法则必然导致个性化。

矛盾必然存在的话,怎么缓解、怎么解决呢?

略之?惑之?堵之?疏之?灭之?解之?

可问题是,你有得选吗!

简化

简化是一种本事,也是一种病。

为了简化,逐渐失真、扭曲、捏造。