我有了定义一个运算符的想法,该运算符采用(可能)多维列表和索引列表,并返回该元素.我的原型尝试是:
(!!!) xs [i] = xs !! i
(!!!) xs (cI : restI) = (xs !! cI) !!! restI
Run Code Online (Sandbox Code Playgroud)
回想起来,这显然有很多问题.我首先想不出类型签名,然后我意识到在第2行,(xs !! cI)的返回类型将不断变化,并且可能并不总是一个列表(在最后一次"迭代"中)
我意识到要使用标准的下标运算符访问多维数组,您可以简单地将其链接为:
[[1,2,3],[4,5,6],[7,8,9]] !! 1 !! 1 = 5
Run Code Online (Sandbox Code Playgroud)
并意识到这看起来很像折叠,所以我试过:
(!!!) xxs inds = foldl (!!) xxs inds
or simply (!!!) = foldl (!!)
Run Code Online (Sandbox Code Playgroud)
但是我得到的错误与我的第一次尝试相同; 我正在尝试构建一个无限类型.
这种类型的功能是否可行(通过黑客或其他方式)?我开始认为它的类型太空中了.
举个例子,我的目标是:
[[1,2,3],[4,5,6],[7,8,9]] !!! [1,1] = 5
Run Code Online (Sandbox Code Playgroud) 我正在试图弄清楚Haskell的Control.Parallel模块,我写了以下内容(tMap是时间比较的基础案例):
import Control.Parallel
paraMap, tMap :: (a -> b) -> [a] -> [b]
paraMap _ [] = []
paraMap f [x] = [f x]
paraMap f (x : xs@(y : ys)) = (f y `par` f x) : paraMap f xs
tMap _ [] = []
tMap f (x : xs) = f x : tMap f xs
Run Code Online (Sandbox Code Playgroud)
想法是paraMap将在完成当前元素之前开始计算下一个元素.我的测试显示它的性能比tMap差.我猜这是因为par引入了更多的开销,并且因为我没有正确使用它,所以它没有产生足够的收益来克服成本.
我上面的例子有什么问题?据我了解,x 'par' y基本上意味着"我需要x以后,所以并行计算它,但y现在返回"(类似于seq如何工作,但体现在一个spark,它允许它在一个单独的线程上计算的机会).
我唯一能想到的是,它被混淆了,因为我需要在函数的单独实例中的下一个元素(递归).我想我可以paraMap围绕实际的递归创建一个包装器,并明确地将下一个par'd元素传递给下一个递归; 但这看起来很笨拙.
我尝试通过编译它:! ghc -o -threaded <fileName> …
JavaFX AnimationTimer在启动时是否在单独的线程上运行?
我在调试器中运行了一个JavaFX应用程序,有或没有AnimationTimer,并且在两种情况下都运行了6个线程.另外,JavaDocs没有提到它的实现Runnable.
这表明它不是在自己的线程中运行,但就其本质而言,我认为它需要在自己的线程中运行以确保它以足够的时间运行.
如果它不是在自己的线程中运行,它是否只是在任何线程中运行它?这是否意味着如果我在创建AnimationTimer内部的时候修改Timer中的UI元素是安全Application的start()?
测试代码:
int[] test = {0, 1, 2, 3};
System.out.println("test1[3] ++== 0 is " + (test[3] ++== 0));
Run Code Online (Sandbox Code Playgroud)结果:
test1 [3] ++ == 0是假的
所以它必须是某种逻辑运算符,但我无法找到任何文档.搜索互联网没有提供任何参考.
请帮忙?提前致谢.
我有以下graphQL结果:
[仅{详细信息=仅“ 33秒引擎故障和车辆丢失”,launch_year =仅“ 2006”,链接=仅{article_link =仅“ https://www.space.com/2196-spacex-inaugural-falcon -1-rocket-lost-launch.html “},mission_name = Just” FalconSat“}]
基于以下类型:
type alias Launch =
{ mission_name : Maybe String
, details : Maybe String
, launch_year : Maybe String
, links : Maybe LaunchLinks
}
type alias Launches =
Maybe (List (Maybe Launch))
type alias LaunchLinks =
{ article_link : Maybe String
}
Run Code Online (Sandbox Code Playgroud)
我想通过List.map并将结果显示在无序列表中。我从这个开始:
renderLaunch : Launches -> Html Msg
renderLaunch launches =
div [] <|
case launches of
Nothing ->
[ text "Nothing here" ]
Just …Run Code Online (Sandbox Code Playgroud) 我正在阅读Real World Haskell,作为仿函数/ monad的介绍,它给出了以下示例:
parseByte :: Parse Word8
parseByte =
getState ==> \initState ->
case L.uncons (string initState) of
Nothing ->
bail "no more input"
Just (byte,remainder) ->
putState newState ==> \_ ->
identity byte
where newState = initState { string = remainder,
offset = newOffset }
newOffset = offset initState + 1
Run Code Online (Sandbox Code Playgroud)
(其余部分可以在页面的四分之一处阅读:http://book.realworldhaskell.org/read/code-case-study-parsing-a-binary-data-format.html)
对我没有任何意义的是,为什么这个功能不带任何参数?我希望它接受包含要解析的文本的Parse对象,然后返回解析的文本和新的Parse对象.相反,(我认为)它"神奇地"访问Parser,弹出一个字节,然后返回一个"修改过的"Parser.对象来自哪里?我一直盯着看了一天,仍然不知道这个功能是如何工作的.
这里的任何指导将不胜感激.
对于作业,我需要form在我的网页中放置一个,并让表单填充一封电子邮件供用户发送。
我在四处搜寻后写下了这个:
<form enctype="text/plain" method="post" action="mailto:[My Email Here]">
<input type="text" name="subject" value="Subject" />
<input type="text" name="body" value="Body" />
<input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
正如我所期望的,它会打开我的邮件客户端并为我填充一封电子邮件。问题是,它的填充方式非常丑陋且不直观。主题行留空,正文填充:
subject=Subject
body=Body
submit=Submit
(4 lines of white-space)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望“主题”最终出现在主题中,“正文”字段成为唯一出现在正文中的内容,并且“提交”根本不会出现在用户面前。
这可能吗?
此时我只被允许使用 HTML。(仅限 HTML。不允许内联脚本)。
我一直的印象是那台是没有顺序的下,但注意到,人物套做似乎下令:
(seq #{\e \c \b \z \a})
=> (\a \b \c \e \z)
Run Code Online (Sandbox Code Playgroud)
如果我介绍其他类型的字符,似乎它们是根据字符的代码进行排序:
(seq #{\e \A \c \space \b \z \a})
=> (\space \A \a \b \c \e \z)
Run Code Online (Sandbox Code Playgroud)
为什么字符根据其代码进行排序,但数字集似乎有任意排序?
我很惊讶地发现clojure向量实现了Associative接口.
(associative? [1 2 3]) ; => true
Run Code Online (Sandbox Code Playgroud)
我假设这个接口通过键提供优化的索引.根据这个假设,界面似乎适用于地图数据结构,但对于矢量来说很奇怪,它不遵循我心目中的键值启发式.
我的心理模型Associative或vector实施是否不正确?这个设计选择有什么用途?
作为Lisp方言的Clojure继承了Lisp的同音性.同源性使元编程更容易,因为代码可以被视为数据:语言中的反射(在运行时检查程序的实体)依赖于单个同构结构,并且它不必处理复杂语法中出现的几种不同结构[1].
更加同质的语言结构的缺点是语言结构(例如循环,嵌套ifs,函数调用或开关等)彼此更相似.
在clojure中:
;; if:
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
;; function call:
(repaint (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
Run Code Online (Sandbox Code Playgroud)
两个结构之间的区别只是一个词.用非同性语言:
// if:
if (chunked-seq?(s))
chunk-cons(chunk-first(s), concat(chunk-rest(s), y));
else
cons(first(s), concat(rest(s), y));
// function call:
repaint(chunked-seq?(s),
chunk-cons(chunk-first(s), concat(chunk-rest(s), y)),
cons(first(s), concat(rest(s), y));
Run Code Online (Sandbox Code Playgroud)
有没有办法让这些程序结构在Clojure中更容易识别(更显眼)?也许一些推荐的代码格式或最佳实践?