小编Exp*_* HP的帖子

用于处理由邻居列表函数定义的(可能是无限的)图形的库

这是我在各种编程语言中无数次使用过的模式:

  1. 遇到一个问题,可以很容易地简化为一些图算法.
  2. 定义邻接函数:outEdges :: MyNode -> [MyNode].
  3. 编码所述图算法的一些通用形式,该算法将该函数作为其第一个参数.

例如,考虑这种(有目的效率低下)的方法来计算两个单词之间的编辑距离.我们将计算通过广度优先搜索将一个单词转换为另一个单词所需的最少插入和删除次数.

import Data.List
import Data.Maybe

alphabet :: String
alphabet = ['a'..'z']

wordNeighbors :: String -> [String]
wordNeighbors word = deletions ++ insertions where
    insertions = [pre++[c]++suf | (pre,suf) <- splits, c <- alphabet]
    deletions =  [pre++suf      | (pre,_:suf) <- take (length word) splits]

    splits = zip (inits word) (tails word)

shortestDistance :: (Eq a,Hashable a)=> (a -> [a]) -> a -> a -> Maybe Int
shortestDistance …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell graph

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

导入数据构造函数而不导入类型

numeric-prelude做这个事情,每个数据类型都被命名T,每个类类都被命名C.为了......一致性,我想我会一起玩:

{-# LANGUAGE NoImplicitPrelude #-}
module Number.SqrtRatio (T(..), ratioPart) where

import qualified Number.Ratio as Ratio
import Number.Ratio ((:%))

import qualified Algebra.Ring as Ring
import NumericPrelude.Base

-- | A number whose square is rational, canonicalized as a rational
--   times the square root of a squarefree integer.
data T x = T {
    numerator :: !x,
    denominator :: !x,
    rootNum :: !x
    } deriving (Eq, Show)

ratioPart :: T x -> Ratio.T x
ratioPart (T n …
Run Code Online (Sandbox Code Playgroud)

import haskell

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

为什么这个图像没有垂直镜像?

我发现自己在 webGl 中使用的许多符号和域约定中有点迷失。看看这个 regl 示例(它显示了狒狒测试图像)。以下是我对它的理解:

  • 没有指定原语;它可能推断GL_TRIANGLE
  • 因此,它创建具有顶点的三角形的单一表面(-2, 0)(0, -2)(2, 2)在世界空间。把它画在纸上,看起来这是专门选择的,因为它包含了该区域[0,1] x [0,1]
  • uv从世界空间获取它的值,包括这个[0,1] x [0,1]区域(它是 的域texture2d)。如果我理解正确,惯例是+u指向图像的右边缘+v指向顶部
  • gl_Position设置为1 - 2*uv,以便图像占据[-1,1] x [-1,1], z=0“剪辑空间”,无论是什么。
  • 更重要的是,这也意味着+{u,v}方向对应-{x,y}
  • 显示的图像实际上水平镜像!!(与此相比)但它没有垂直镜像。 在与屏幕像素坐标之间的最终转换过程中必须有其他东西可以抵消 y 中的负因子。
  • 然而,谷歌搜索没有提供gl_Position任何与屏幕相关的镜像。我看到讨论它是左撇子,但这只是z相对于世界坐标的否定。(例如这里的这个问题)

简而言之,在我看来,这个图像也应该垂直镜像。

我错过了什么?


为了后代,代码复制如下:(MIT许可)

const …
Run Code Online (Sandbox Code Playgroud)

javascript webgl opengl-es-2.0 regl

5
推荐指数
0
解决办法
1070
查看次数

检测Python curses中的Caps Lock

对于这样一个基本问题,我很惊讶我找不到任何搜索...

无论如何,我用Python制作了一个curses应用程序,它有助于解决某个DSiWare游戏的难题.有了它,你可以拼图并单独检查它的组成部分.这些键qweasdzx用于绘制瓷砖(按键排列在某种调色板中).在按住Shift的同时按下其中一个按钮会突出显示该颜色的图块.我无法要求更自然的控制方案.

所以很遗憾,Shift再一次给了我一些问题(上次我遇到Shift问题时,我获得了Tumbleweed徽章).虽然这次,问题或多或少是Caps Lock,它通过反转功能完全搞砸了我的程序.

如何使用curses检测Python中Caps Lock的状态?

编辑:如果你打算建议使用一个单独的模块,我可能应该提醒你,curses - 因此我的程序 - 在UNIX领域.

python curses capslock

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

Ruby中的对象地址

简短版本:类 的默认inspect方法显示对象的地址.*如何在inspect我自己的自定义方法中执行此操作?

*(要清楚,我想要你通常会得到的8位十六进制数inspect.我不关心实际的内存地址.我只是把它称为内存地址,因为它看起来像一个.我知道Ruby是存储安全.)

长版: 我有两个课,ThingThingList. ThingList是一个Array专门设计用于保存物品的子类.由于事物的本质以及它们在我的程序中使用的方式,事物有一个实例变量@container,指向ThingList那个持有的东西Thing.

两件事可能具有完全相同的数据.因此,当我调试应用程序时,我可以可靠地区分两件事的唯一方法是使用inspect,它显示他们的地址.当我inspect一个Thing,不过,我得在输出的页面,因为页面inspect会递归的检查@container,造成每一件事的清单进行检查,以及!

我只需要输出的第一部分.如何编写自定义inspect方法Thing才会显示此内容?

#<Thing:0xb7727704>
Run Code Online (Sandbox Code Playgroud)

编辑: 我刚刚意识到默认就是to_s这样.我之前没有注意到这一点,因为我有一个自定义to_s提供有关该对象的人类可读细节.

假设我不能使用to_s,我必须写一个自定义inspect.

ruby debugging memory-address inspect

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