小编ram*_*ion的帖子

Scala:解析匹配令牌

我正在玩一个玩具HTML解析器,以帮助我熟悉Scala的解析组合库:

import scala.util.parsing.combinator._ 
sealed abstract class Node                                                                    
case class TextNode(val contents : String)  extends Node                                      
case class Element(                                                                           
  val tag : String,                                                                           
  val attributes : Map[String,Option[String]],                                                
  val children : Seq[Node]                                                                    
)  extends Node                                                                               

object HTML extends RegexParsers {                                                            
  val node: Parser[Node] = text | element                                                     
  val text: Parser[TextNode] = """[^<]+""".r ^^ TextNode                                      
  val label: Parser[String] = """(\w[:\w]*)""".r                                              
  val value : Parser[String] = """("[^"]*"|\w+)""".r                                   
  val attribute : Parser[(String,Option[String])] = label ~ (                                 
        "=" ~> value ^^ Some[String] | "" ^^ { …
Run Code Online (Sandbox Code Playgroud)

parsing scala

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

不能使用ghci推断的类型签名来返回Sing(d :: Symbol)的函数

我正在尝试恢复Symbol值的类型中使用的:

{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Temp where

import GHC.TypeLits

data Temp (d :: Symbol) (a :: *) where 
  T :: a -> Temp d a

{-
description :: SingI Symbol d => Temp d a -> Sing Symbol d
-}
description (_ :: Temp d a) = (sing :: Sing d)
Run Code Online (Sandbox Code Playgroud)

这在ghci(版本7.6.1)中加载正常:

% ghci
GHCi, version 7.6.1: http://www.haskell.org/ghc/  :? for help
Loading package …
Run Code Online (Sandbox Code Playgroud)

haskell

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

URI.parse的替代方法,允许主机名包含下划线

我使用DMOZ网址列表的主题,其中包含一些网址具有包含下划线的主机名.

例如:

608  <ExternalPage about="http://outer_heaven4.tripod.com/index2.htm">
609    <d:Title>The Outer Heaven</d:Title>
610    <d:Description>Information and image gallery of McFarlane's action figures for Trigun, Akira, Tenchi Muyo and other Japanese Sci-Fi animations.</d:Description>
611    <topic>Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures</topic>
612  </ExternalPage>
Run Code Online (Sandbox Code Playgroud)

虽然这个网址可以在网络浏览器中使用(或者,至少在我的网站中也是如此:p),但根据标准,这是不合法的:

主机名可能不包含其他字符,例如下划线字符(_),

在尝试使用以下方法解析此类URL时会导致错误URI.parse:

[2] pry(main)> require 'uri'
=> true
[3] pry(main)> URI.parse "http://outer_heaven4.tripod.com/index2.htm"
URI::InvalidURIError: the scheme http does not accept registry part: outer_heaven4.tripod.com (or bad hostname?)
from ~/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/generic.rb:213:in `initialize'
Run Code Online (Sandbox Code Playgroud)

有没有替代URI.parse我可以使用具有较低严格性而不仅仅是自己滚动?

ruby uri

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

如何在OpenGL中绕视线旋转时防止变形?

我在XZ平面上绘制了一个椭圆,并将我的视角略微向上设置在Y轴上,然后回到Z上,从45度角观察椭圆的中心,使用gluPerspective()设置我的观看截头体.

椭圆

未旋转,椭圆的长轴跨越视口的宽度.当我围绕我的视线旋转90度时,椭圆的主轴现在跨越我的视口的高度,从而使椭圆变形(在这种情况下,使其看起来不那么偏心).

旋转椭圆

我需要做些什么来防止这种变形(或至少考虑到它),所以围绕视线的旋转会保留椭圆的感知长轴(在这种情况下,导致它超出视口)?

c opengl

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

在我的应用程序包装器脚本启动后,如何使停靠图标停止弹跳?

所以我最近.app为zsh脚本创建了一个包装器,但是当我运行它时,应用程序的图标一直在Dock中跳跃.

该应用基本上是:

% find Example.app -type f
Example.app/Contents/Info.plist
Example.app/Contents/MacOS/wrapper.sh
% cat Example.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <!-- tell OSX what the name of the executable is -->
 <key>CFBundleExecutable</key>
 <string>wrapper.sh</string>
</dict>
</plist>
% cat Example.app/Contents/MacOS/wrapper.sh
#!/usr/bin/env zsh
# not my real script, but something else that hangs for a while
sleep 10
%
Run Code Online (Sandbox Code Playgroud)

你也可以从github上获取它.

有什么方法可以让我的应用程序图标停止跳跃,并像一个普通的应用程序一样,只是坐在旁边有一个三角形?

macos shell zsh dock

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

我的类型签名有什么问题?

我正在使用corecursive数据结构,并且在我的代码中很早就出现了类型错误:

module Graph where
import Data.Map 

data Node a = Node { getLabel :: a, getInEdges :: [Edge a], getOutEdges :: [Edge a] }
data Edge a = Edge { getStart :: Node a, getEnd :: Node a }
data Graph a = Graph { getNodes :: [Node a], getEdges :: [Edge a] }

mkGraph :: (Ord a) => [(a,a)] -> Graph a
mkGraph pairs = Graph (elems nodes) edges
  where nodes :: Map a (Node a)
        edges :: [Edge …
Run Code Online (Sandbox Code Playgroud)

haskell type-signature

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

Haskell/GHC:匹配具有相同模式的多个一元构造函数

所以我正在玩定义TrieSet数据类型(即使我知道我不需要):

module Temp where

import Data.Map

data TrieSet a = Nonterminal (Data.Map a (TrieSet a)) | Terminal (Data.Map a (TrieSet a))

insert :: Ord a => [a] -> TrieSet a -> TrieSet a
insert [] (_ m) = Terminal m
insert (a:as) (c m) = c $ insertWith (insert as . flip const) a (insert as $ Nonterminal empty) m
Run Code Online (Sandbox Code Playgroud)

当我收到一个我从未见过的错误时:

% ghc -c Temp.hs
Temp.hs:8:11: Parse error in pattern
Run Code Online (Sandbox Code Playgroud)

因此,似乎GHC不喜欢使用相同模式匹配多个一元构造函数.我做了另一个测试,以确保这是问题:

module Temp2 where

extract :: Either String …
Run Code Online (Sandbox Code Playgroud)

constructor haskell pattern-matching ghc

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

使用 Factor 源代码树之外的代码

我正在尝试开始使用因子。

到目前为止,我已经:

  • 下载了 OSX 磁盘映像
  • 将因子目录复制到 $INSTALL/factor
  • 通过运行启动调试器 $INSTALL/factor/factor

这似乎运行良好。

按照编写第一个因子程序的说明,我注意到scaffold-vocab在我的$INSTALL/factor/work目录中生成了文件。我现在可以使用它,但总的来说,我喜欢保留一个单独的$INSTALL目录树和$CODE目录树。

所以我试图按照“使用因子目录树之外的代码”文档中的说明将其他目录添加到用于将代码加载到factor可执行文件的路径中,但我运气不佳。

首先,我尝试设置一个FACTOR_ROOTS环境变量:

% export FACTOR_ROOTS=.:$CODE/Factor:$INSTALL/factor
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

然后,我尝试创建一个~/.factor-roots文件

% echo . > ~/.factor-roots
% echo $CODE/Factor >> ~/.factor-roots 
% echo $INSTALL/factor >> ~/.factor-roots
% $INSTALL/factor/factor        
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

然后我检查了它是否应该./.factor-roots改为:

% …
Run Code Online (Sandbox Code Playgroud)

path factor-lang

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

Maven:我如何安装mvnsh?

我怀疑我完全是错误的做法.

我听说过mvnsh,并且想尝试一下,以减少构建时的滞后.

但我完全不知道如何做到这一点.我还在学习行家,和绘画之间的相似之处假mvn像和工具gem,cabalcpan仍是咬我,所以我不知道我需要做的,像安装一个命令行工具mvnsh.

将它作为某个任意项目的依赖项似乎没有意义pom.xml.

mvnsh-assembly-1.0.1.pom从下载页面下载了迄今为止所涉及的理论,但到目前为止,我所尝试的一切都没有奏效. mvn install -f mvnsh-assembly-1.0.1.pom下载了一堆罐子,然后死了. mvn artifact:install -f mvnsh-assembly-1.0.1.pom下载了更多的罐子,然后死了.

我真的不知道我在这做什么.我甚至可以mvn用来安装mvnsh吗?

maven

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

带有tformat的git log中的额外换行符

当我使用时git log --pretty=oneline --shortstat,我得到了我的日志的紧凑表示:

% git log --pretty=oneline --shortstat
73c6eecd930c2f66d5c1e87fcca7ca9b0e356809 doing stuff with things
 3 files changed, 134 insertions(+)
65b457d2e0e94e628e1b30204075540524c8a1d2 doing things with stuff
 2 files changed, 4 insertions(+), 1 deletion(-)
...
375531279297af3c787855b0848b400f1c40b638 things with stuff doing
 1 file changed, 2 insertions(+)
5501964b19815a07b64e1cd391e032147af33b8f with things doing stuff
 25 files changed, 6746 insertions(+)
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试使用tformat等效的oneline,我会在stat之前得到一个额外的换行符:

% git log --pretty="%C(yellow)%H%Creset %s" --shortstat
73c6eecd930c2f66d5c1e87fcca7ca9b0e356809 doing stuff with things

 3 files changed, 134 insertions(+)
65b457d2e0e94e628e1b30204075540524c8a1d2 doing things with stuff …
Run Code Online (Sandbox Code Playgroud)

git git-log

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