我正在编写一个程序,对于给定的类型签名重建这种类型的Haskell表达式,例如:for for a -> b -> areturn \x -> \_ -> x.我已经读过这个问题背后的理论,我知道有这个霍华德 - 库里的同构.我想我的程序解析输入并将其表示为术语.然后我会触发SLD分辨率,告诉我是否可以构造给定类型的术语(例如,对于Pierce来说,这是不可能的).我还不知道如何在此分辨率期间实际创建Haskell表达式.我已经看过djinn的代码,但它有点复杂,我想掌握一些关于它如何工作的一般概念.
我知道copy_to_user/ copy_from_user,get_user/ put_user函数就是为了这个目的.
我的问题是,给定一个用户空间地址/指针,如何从内核中访问地址所指向的数据?
我可以想象,首先我必须确保包含页面应该在物理内存中(而不是在磁盘中).
你下一步怎么做?我可以使用*p,其中p的指针指向某些用户空间中的数据,直接引用的数据?
或者我是否必须先调用kmap将包含的物理页面框架映射到内核虚拟地址空间?为什么?
urllib.request.urlopen如果response.status_code不是200,我怎样才能避免例外?现在它提出URLError或HTTPError基于请求状态.
有没有其他方法来使用python3基本库进行请求?
如果能获得响应头status_code != 200?
我有一个Jekyll的自定义页面:我有一个news.markdown如下文件:
{% assign posts_per_page = 5 %}
{% for post in site.categories.ro offset:pagination_skip limit:posts_per_page %}
...
{{ post.content }}
...
{% endfor %}
{% include nav.html %}
Run Code Online (Sandbox Code Playgroud)
凡nav.html在_includes目录中,它看起来是这样的:
{% if pagination_skip %}
{% capture pagination_skip %}
{{pagination_skip | plus: posts_per_page}}
{% endcapture %}
{% else %}
{% assign pagination_skip = posts_per_page %}
{% endif %}
<div class="next">
<a rel="prev" href="{{site.basepath}}ro/news/{{ pagination_skip }}">Next</a>
</div>
Run Code Online (Sandbox Code Playgroud)
我想是的URL .../ro/news/5映射到的内容news.markdown,从而pagination_skip存在5.同样适用于10,15,无论如何.而且,.../ro/news/0应该尽可能相同 …
假设我想创建一个新的数据类型并使构造函数可以显示,只是小写而不是大写的定义.例如:
data Day = Monday | Tuesday | Wednesday| Thursday | Friday | Saturday | Sunday
Run Code Online (Sandbox Code Playgroud)
通过添加派生显示,ghci会将它们打印为"星期一,星期二......等" 为了让它显示"星期一,星期二......等",我试图制作一个特殊的show实例:
import Data.Char
strToLower :: [Char] -> [Char]
strToLower (x:xs) = toLower x : strToLower xs
strToLower [] = []
instance Show Day where
show d = strToLower (show d)
Run Code Online (Sandbox Code Playgroud)
show的第一次出现应该指定我新修改的show函数(每次打印时都会调用),而对于第二次我打算通常派生的show版本,从构造函数名称到String.
当然这不起作用(循环定义),因为ghci对我的"show"这个词的单独含义没有任何线索,但我无法弄清楚如何让他知道这个区别,因为这两个版本都需要命名为show ,第一个是因为这是打印调用和第二个因为它是一个预定义的haskell函数,它可以给我一个构造函数名称的字符串.我试过了
show d = strToLower ((showsPrec 0 d) "")
Run Code Online (Sandbox Code Playgroud)
但这归结为相同的循环定义,至少这是我从ghci卡在循环中的猜测.
我理解为什么构造函数名称需要以大写字母开头,但显示小写字母应该不是问题,是吗?我知道我可以单独为每个案例定义我的show函数,例如show Monday = "monday" show Tuesday = "tuesday"etc,但我只是以星期几为例,我的真实数据类型由64个构造函数组成,所以我认为它会更优雅以某种方式解决它.
是否有可能深入了解show的haskell定义并更改该代码的副本?这是我能想到的唯一可能的解决方案,但我不知道该怎么做,如果可能的话.可能不是.所以其他解决方案也非常受欢迎!
感谢您抽出宝贵时间
杰勒(哈斯克尔初学者)
我用 c-unix 语言创建了一个多进程客户端 - 服务器。与客户端的每个连接都作为子进程进行管理。发生错误时,我只是调用函数 exit(EXIT_FAILURE),因为我读到该函数会关闭所有打开的流。问题是:我必须关闭客户端套接字描述符还是自动关闭?
我的代码的一个例子是:
while(1){
if((client_sock=accept(ds_sock,&client,&s_client))==-1){
printf("Accept error\n");
exit(EXIT_FAILURE);
}
if(fork()==0){ //child
if((close(ds_sock)==-1)){
printf("Closing error\n");
exit(EXIT_FAILURE);
}
if((read(client_sock,&up,sizeof(userpass)))==-1){
printf("Error read\n");
exit(EXIT_FAILURE); //Does this instruction close the client_sock too?
}
Run Code Online (Sandbox Code Playgroud) 虽然我已经学习了Haskell一段时间,但我经常遇到一个常见的问题.我们以此表达式为例:
e f $ g . h i . j
Run Code Online (Sandbox Code Playgroud)
有人可能想知道,给出$和.来自Prelude,什么是类型约束e或h表达有效?
是否有可能获得"更简单"但等效的表示?对我来说,"更简单"将是一个在任何地方都使用括号的人,并且无需定义运算符优先级规则.
如果没有,我需要阅读哪些Haskell报告部分才能获得完整的图片?
这可能与许多新手Haskell程序员有关.我知道许多程序员添加括号,这样他们就不需要记住(或理解)像这样的优先级表:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
我有邻接矩阵和以下代码:
if (is_broadcast_message) {
MPI_Send(&broadcast_message,1,MPI_INT,j,3,MPI_COMM_WORLD);
MPI_Send(&message,20,MPI_CHAR,j,3,MPI_COMM_WORLD);
}
Run Code Online (Sandbox Code Playgroud)
哪里broadcast_message=128(随机数只是为了知道我什么时候收到的,这是广播消息)
消息定义为char [20]。
else if (i have to send only to a node) {
MPI_Send(&destination,1,MPI_INT,next_hop[destination],3,MPI_COMM_WORLD);
MPI_Send(&message,20, MPI_CHAR, next_hop[destination],3,MPI_COMM_WORLD);
}
Run Code Online (Sandbox Code Playgroud)
收到邮件时,我首先要检查recv_payload是128(广播值)还是其他值:
MPI_Recv(&recv_material,1,MPI_INT,MPI_ANY_SOURCE,3,MPI_COMM_WORLD,&status2);
Run Code Online (Sandbox Code Playgroud)
如果是128,则:
MPI_Recv(&message,20,MPI_CHAR,from_d,3,MPI_COMM_WORLD,&status2);
Run Code Online (Sandbox Code Playgroud)
我正在将消息转发到所有流程
MPI_Send(&message,20,MPI_CHAR,j,3,MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)
如果不是128,我正在检查我是否是目的地:
if(recv_material == rank)
MPI_Recv(&mesaj,20,MPI_CHAR,from_d,3,MPI_COMM_WORLD,&status2);
Run Code Online (Sandbox Code Playgroud)
否则,我正在发送nexthop [recv_material]
MPI_Send(&mesaj,20,MPI_CHAR,next_hop[recv_material],3,MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)
问题是我收到以下错误,但我不知道为什么:
Fatal error in MPI_Recv: Message truncated, error stack:
MPI_Recv(186).....................: MPI_Recv(buf=0x7fffbce8f2a4, count=1, MPI_INT
src=MPI_ANY_SOURCE, tag=3, MPI_COMM_WORLD, status=0x7fffbce8f250) failed
MPIDI_CH3U_Receive_data_found(129): Message from rank 7 and tag 3 truncated;
20 bytes received but buffer size is …Run Code Online (Sandbox Code Playgroud) 我想用随机数来愚弄,如果haskell中的随机生成器是否均匀分布,那么我在几次尝试之后写了下面的程序(生成列表导致堆栈溢出).
module Main where
import System.Environment (getArgs)
import Control.Applicative ((<$>))
import System.Random (randomRIO)
main :: IO ()
main = do nn <- map read <$> getArgs :: IO [Int]
let n = if null nn then 10000 else head nn
m <- loop n 0 (randomRIO (0,1))
putStrLn $ "True: "++show (m//n::Double) ++", False "++show ((n-m)//n :: Double)
return ()
loop :: Int -> Int -> IO Double -> IO Int
loop n acc x | n<0 = return acc …Run Code Online (Sandbox Code Playgroud) haskell ×5
c ×3
python ×2
c++ ×1
exception ×1
exit ×1
graphviz ×1
httprequest ×1
java ×1
jekyll ×1
linux-kernel ×1
logic ×1
mpi ×1
performance ×1
python-3.4 ×1
show ×1
sockets ×1
tikz ×1
types ×1
urllib ×1