我们都知道:t在ghci给出表达式的类型:
Prelude> :t [1..]
[1..] :: (Enum t, Num t) => [t]
Run Code Online (Sandbox Code Playgroud)
我需要的是一个相当于:thaskell脚本(我会称之为typeStr):
main = putStrLn $ typeStr [1..]
Run Code Online (Sandbox Code Playgroud)
可以(Enum t, Num t) => [t]在屏幕上打印出类似的内容.
那可能吗?
对标题感到抱歉,我不知道是否有更好的方法可以在一个简短的句子中描述它.
我的想法是我想要一个函数类型来表示函数接受一个参数但永远不会评估它.
我能想到的选择很少,我想知道最好的选择:
(对于以下所有示例,Int只是从任何具体类型中任意选择)
f :: forall a . a -> Intf用任何东西喂食都可以f :: () -> Int,除了要评估的微不足道的价值之外别无他物f :: Void -> Int,这可能是一个坏主意,因为它可能会f = absurd和或被f应用,但如果你知道终止,那么你也知道它永远不会评估它的论点.undefinedlet x = x in xf关于为什么我首先需要这样的函数:假设我想设计一个流处理库并让流处理器的类型相似,SP <input-type> <output-type>并且处理器可能不需要任何输入.在某些时候,我将不得不处理一个函数,就像<input-type> -> <output-type>我想要这样做Arrow.
我想实现一个方法dim(x,y),它将为矩阵(y rows,x cols)分配空格.
我希望通过将可选函数"填充"传递给它来使"dim(x,y)"更强大,然后'dim'将位于(x,y)的元素设置为填充(x,y)
我的代码如下:
List2D dim := method(x, y, z,
target := list()
filler := if(z == nil,
method(return nil),
z)
for(i, 1, y,
subTarget := list()
for(j, 1, x,
subTarget append( filler(i,j) ))
target append(subTarget) )
return target)
Run Code Online (Sandbox Code Playgroud)
当使用2个参数调用'dim'时,它运行良好,但是失败了
List2D dim(3,2, method(x,y, 10*x+y))
在线上引发了异常filler := if(z == nil
.例外说nil does not respond to '*'
我意识到当与nil比较时,'z'被不正常地激活了.
所以我想知道如何让我的'List2D昏暗'正常工作?
看完这个页面.我发现很难记住如何使用define-syntax代替define-macro,所以我想define-macro在mit-scheme中实现(或者至少找到一些等价物).
这是我的(有问题的)实现:
(define-syntax define-macro
(rsc-macro-transformer
(let ((xfmr (lambda (macro-name macro-body)
(list 'define-syntax macro-name
(list 'rsc-macro-transformer
(let ((m-xfmr macro-body))
(lambda (e r)
(apply m-xfmr (cdr e)))))))))
(lambda (e r)
(apply xfmr (cdr e))))))
(define-macro my-when
(lambda (test . branch)
(list 'if test (cons 'begin branch))))
(my-when #t
(begin
(display "True")
(newline)))
Run Code Online (Sandbox Code Playgroud)
REPL抱怨说:
;The object (lambda (test . branch) (list (quote if) test (cons (quote begin) branch))) is not applicable.
Run Code Online (Sandbox Code Playgroud)
我刚接触计划并且不知道出了什么问题,有人可以帮助我吗?
我已经写了这个批处理文件代码,但是有这个错误,如果您回答我,我感谢您。
错误是,当我选择2时,它问我要进入期望的站点,但是当我写地址时却出现错误,说ECHO IS OFF
帮助我该怎么做...
@echo off
title trace
:main
echo 1)TRACE GOOGLE
echo 2)TRACE YOUR SITE
set /p choice= Enter your choice:
echo %choice%
if %choice%==1 (
tracert www.google.com
goto main
pause >nul
)
if %choice%==2 (
set /p s=Enter your desired site:
echo %s%
pause >nul
)
pause >nul
Run Code Online (Sandbox Code Playgroud)