我想知道为什么这个"调试消息1"没有打印在这个片段中:
import Debug.Trace
main = do
return (trace "debug message 1" ())
trace "debug message 2" (return ())
Run Code Online (Sandbox Code Playgroud)
打印出第二个"调试消息2",但不打印"调试消息1".似乎两个表达都是一样的.
我尝试将"debug message 1"绑定到变量,然后在另一个地方使用该变量,它实际上触发了评估并打印"debug message 1",但我仍然不明白为什么会发生这种情况.
如果我翻转语句的顺序,它仍然是相同的结果:
import Debug.Trace
main = do
trace "debug message 2" (return ())
return (trace "debug message 1" ())
Run Code Online (Sandbox Code Playgroud)
永远不会打印"调试消息1"(使用runhaskell).
我看到这个问题:Implementing custom loss function in keras with condition我需要做同样的事情,但代码似乎需要循环。
我有一个自定义numpy函数,可以计算与平均向量的平均欧几里得距离。我根据论文https://arxiv.org/pdf/1801.05365.pdf写了这篇文章:
import numpy as np
def mean_euclid_distance_from_mean_vector(n_vectors):
dists = []
for (i, v) in enumerate(n_vectors):
n_vectors_rest = n_vectors[np.arange(len(n_vectors)) != i]
print("rest of vectors: ")
print(n_vectors_rest)
# calculate mean vector
mean_rest = n_vectors_rest.mean(axis=0)
print("mean rest vector")
print(mean_rest)
dist = v - mean_rest
print("dist vector")
print(dist)
dists.append(dist)
# dists is now a matrix of distance vectors (distance from the mean vector)
dists = np.array(dists)
print("distance vector matrix")
print(dists) …Run Code Online (Sandbox Code Playgroud) 我<router-link />想用它来导航到 Vue 3 应用程序中的另一个页面,但我还想在单击此链接时运行另一个函数。
现在我必须使用一个额外的<span />元素来包装<router-link />并添加@click属性以依赖事件冒泡。添加@click处理程序<router-link />会导致路由器链接不起作用,浏览器认为它只是一个普通的锚点 href。
<span @click="handleClose(imageId)">
<router-link
:to="{name: 'image', params: {'imageId': imageId}}"
class="permalink">
Permalink
</router-link>
</span>
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
启动 dask 分布式本地集群时,您可以为 .dask 设置随机端口或地址dashboard_address。
如果你后来得到了这个scheduler对象。有没有办法提取仪表板的地址。
我有这个:
cluster = dask.distributed.LocalCluster(scheduler_port=0,
dashboard_address='localhost:0')
scheduler = dask.distributed.Client(cluster, set_as_default=False)
scheduler_info = scheduler.scheduler_info()
logger.info('Scheduler: %s', scheduler_info['address'])
logger.info('Status Port: %s', scheduler_info['services']['dashboard'])
Run Code Online (Sandbox Code Playgroud)
但这只能获取仪表板的端口,而不是仪表板的 IP。如果我将仪表板地址放在调度程序之外的单独 IP 上,似乎很难知道它绑定到哪个 IP。
假设一个简单的类型类约束签名:
f :: (Eq a, Num b) => a -> b
f str = 4
Run Code Online (Sandbox Code Playgroud)
我想知道为什么这些不起作用
f :: (Eq a) -> (Num b)
f str = 4
f :: Eq -> Num
f str = 4
Run Code Online (Sandbox Code Playgroud)
我知道类型类有类型* -> Constraint,而类型签名只接受各种类型*.
但我的问题是为什么会有这种限制?为什么不能像类型一样使用类型类?允许使用像类型这样的类型类的能力有哪些优点和缺点?
当我创建一个数字时:
x = 1
y = 2
z = 3
Run Code Online (Sandbox Code Playgroud)
这些变量的类型如下:
ghci> :t x
ghci> Num a => a
Run Code Online (Sandbox Code Playgroud)
这让我认为1是一个"数据构造函数",它不构造一个类型,也不构造一个类型构造函数,而是构造一个受Num类约束的类型.这允许我Num a通过运行x :: Int或进一步向编译器澄清我想要的那个x :: Integer.
我试着在文档中找到这是怎么做的,但没有运气.
所以问题是,如何才能创建类似的数据类型?换句话说,我如何创建一组类似于1,2,3,4,5...创建类型值的数据构造函数MyOwnClass a => a,其中MyOwnClass是我自己创建的任意类?
例如:
x = A
y = ?
z = ?
ghci> :t x
ghci> Alphabet a => a
Run Code Online (Sandbox Code Playgroud) 读完这个问题后:功能证明(Haskell)
在查看forall xs ys. length (xs ++ ys) = length xs + length ys了Haskell音乐学院的归纳证明之后(第164页).
在我看来,函数应用程序分布在列表串联上.
因此,更普遍的法律可能就是这样forall f xs ys. f (xs ++ ys) = f xs ++ f ys.
但是,如何证明/反驳这样的谓词呢?
- 编辑 -
我写了一个错字:forall f xs ys. f (xs ++ ys) = f xs + f ys它与上一个问题和Haskell SoM使用的内容相匹配.话虽如此,由于这个错字,它不再是"分配"财产.然而,@ leftaroundabout为我原来的错字问题做出了正确答案.至于我的预期问题,法律仍然不正确,因为功能不需要保留结构价值.将f可能给依赖于它应用到列表的长度完全不同的答案.
我试图实现一个排序的多属性排序,适用于任何事物的列表.
import Data.Ord (Ordering, Down (..), comparing)
import Data.List (sortBy)
import Data.Monoid (mconcat)
data Order a = ASC a | DESC a
orderBy :: Ord b => [Order (a -> b)] -> [a] -> [a]
orderBy rankedProperties unsorted =
sortBy rankedCompare unsorted
where
rankedCompare x y =
mconcat $ map
(\property ->
case property of
ASC f -> comparing f x y
DESC f -> comparing (Down . f) x y
) rankedProperties
Run Code Online (Sandbox Code Playgroud)
它现在适用于元组和记录,但是我发现了一个问题.问题是bin orderBy必须是相同的.这是考虑到这个:
data Row …Run Code Online (Sandbox Code Playgroud)