我正在玩一个玩具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) 我正在尝试恢复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) 我使用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我可以使用具有较低严格性而不仅仅是自己滚动?
我在XZ平面上绘制了一个椭圆,并将我的视角略微向上设置在Y轴上,然后回到Z上,从45度角观察椭圆的中心,使用gluPerspective()设置我的观看截头体.
未旋转,椭圆的长轴跨越视口的宽度.当我围绕我的视线旋转90度时,椭圆的主轴现在跨越我的视口的高度,从而使椭圆变形(在这种情况下,使其看起来不那么偏心).
我需要做些什么来防止这种变形(或至少考虑到它),所以围绕视线的旋转会保留椭圆的感知长轴(在这种情况下,导致它超出视口)?
所以我最近.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)
有什么方法可以让我的应用程序图标停止跳跃,并像一个普通的应用程序一样,只是坐在旁边有一个三角形?
我正在使用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) 所以我正在玩定义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) 我正在尝试开始使用因子。
到目前为止,我已经:
$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) 我怀疑我完全是错误的做法.
我听说过mvnsh,并且想尝试一下,以减少构建时的滞后.
但我完全不知道如何做到这一点.我还在学习行家,和绘画之间的相似之处假mvn像和工具gem,cabal或cpan仍是咬我,所以我不知道我需要做的,像安装一个命令行工具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吗?
当我使用时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)