标签: nemerle

Nemerle宏的中缀格式

说我需要一些非常特殊的乘法运算符.它可以在以下宏中实现:

macro @<<!(op1, op2)
{
    <[ ( $op1 * $op2 ) ]>
}
Run Code Online (Sandbox Code Playgroud)

我可以像使用它一样

def val = 2 <<! 3
Run Code Online (Sandbox Code Playgroud)

它的工作.

但我真正想要的是现在正在开发的DSL Im的"英语"操作员:

macro @multiply(op1, op2)
{
    <[ ( $op1 * $op2 ) ]>
}
Run Code Online (Sandbox Code Playgroud)

如果我试着像它一样使用它

def val = 2 multiply 3
Run Code Online (Sandbox Code Playgroud)

编译器因'expected;'而失败 错误

问题是什么?如何实现这个中缀格式宏?

dsl metaprogramming nemerle

3
推荐指数
1
解决办法
422
查看次数

如何在控制台应用程序中创建表单后隐藏控制台

我想在我的控制台应用程序中创建一个from后隐藏我的控制台.关闭表格后再显示:)或者我想要的时候...

Console.Hide???
Application.Run(nForm());
Console.Show???
Run Code Online (Sandbox Code Playgroud)

.net c# console nemerle

3
推荐指数
1
解决办法
2050
查看次数

F#匹配 - >

我想做类似的东西(Nemerle语法)

def something =
match(STT)
    | 1 with st= "Summ"
    | 2 with st= "AVG" =>
        $"$st : $(summbycol(counter,STT))"
Run Code Online (Sandbox Code Playgroud)

在F#上,F#真的如此吗?

f# nemerle

3
推荐指数
2
解决办法
753
查看次数

Nemerle自定义操作员问题

想要在我的代码中编写的内容如下.

c² = a² + b²
Run Code Online (Sandbox Code Playgroud)

首先,我尝试创建一个宏².我尝试了以下内容.

  macro @² (x)
syntax (x,"²")
{
 <[ 
($x * $x)

  ]>
}
Run Code Online (Sandbox Code Playgroud)

但是我在期待一个标识符错误,(x)所以我尝试了

  macro @s (x)
syntax (x,"²")
{
 <[ 
($x * $x)

  ]>
}
Run Code Online (Sandbox Code Playgroud)

现在我得到了不支持的语法令牌错误"²".

所以我问1.可以编写运算符²吗?2.支持的语法标记是什么?

macros nemerle

3
推荐指数
1
解决办法
355
查看次数

报价真实用法

我面对的是"引用"一词,我试图弄清楚一些现实生活中使用它的例子.为每个代码表达式设置AST的能力听起来很棒,但如何在现实生活中使用它?

有谁知道这样的例子?

c# f# nemerle quotations

3
推荐指数
1
解决办法
381
查看次数

C#中"假"linq理解语法关键字的可用选项?

虽然在某些情况下我会使用方法链编写一些东西(特别是如果它只是一两个方法,比如foo.Where(..).ToArray()),在很多情况下我更喜欢LINQ查询理解语法相反(规范中的"查询表达式"),如下所示:

var query =
    from filePath in Directory.GetFiles(directoryPath)
    let fileName = Path.GetFileName(filePath)
    let baseFileName = fileName.Split(' ', '_').First()
    group filePath by baseFileName into fileGroup
    select new
    {
        BaseFileName = fileGroup.Key,
        Count = fileGroup.Count(),
    };
Run Code Online (Sandbox Code Playgroud)

在一些相当大的块中,我需要将生成的IEnumerable和eager-load加载到数据结构(数组,列表,等等)中.这通常意味着:

  1. 添加另一个局部变量,如var queryResult = query.ToArray(); 要么

  2. 用parens包装查询并在ToArray(或ToList或其他)上标记.

var query = (
    from filePath in Directory.GetFiles(directoryPath)
    let fileName = Path.GetFileName(filePath)
    let baseFileName = fileName.Split(' ', '_').First()
    group filePath by baseFileName into fileGroup
    select new
    {
        BaseFileName = fileGroup.Key,
        Count = fileGroup.Count(),
    }
).ToArray();
Run Code Online (Sandbox Code Playgroud)

我试图找出其他人的选择1)已经使用或2)可以认为添加一些额外的"上下文关键字"是可行的 - 只是将转换为扩展方法的方式与现有方法相同,好像LINQ关键字是'本地'可扩展的:)

我意识到这很可能意味着要么进行某种预处理(不确定C#的这个领域有什么)或者将编译器改为 …

c# linq linq-to-objects nemerle roslyn

3
推荐指数
1
解决办法
625
查看次数

如何避免在.NET中为不同的数字类型编写重复代码

我正在尝试编写通用的Vector2类型,它将包含float,double等类型并使用算术运算.有没有机会在C#,F#,Nemerle或任何其他或多或少成熟的.NET语言中做到这一点?

我需要一个解决方案

  • (1)良好的性能(与我编写单独的Vector2Float,Vector2Double等类相同),
  • (2)这将允许代码看起来不错(我不想在运行时为每个类发出代码)
  • (3)并尽可能多地进行编译时检查.

由于原因1和3,我不想使用动态.现在我正在检查F#和Nemerle.

UPD:我希望这种类型有很多数学代码.但是,如果可能的话,我更愿意将代码放在扩展方法中.

UPD2: 'etc'类型包括int(我实际上怀疑我会使用)和decimal(我想我可以使用,但现在不是).使用扩展方法只是一个品味问题 - 如果有充分理由不这样做,请告诉我们.

c# f# numbers dry nemerle

3
推荐指数
1
解决办法
543
查看次数

F#元编程:是否可以使IF X = 1或2语法?

我想简化表达if(x == 1 || x == 2).
我希望我能写,if(x == 1 or 2)但没有语法.
其他可能性是使用Contains或Any方法,如:if([1,2].Contains(x))但这涉及不必要的调用.

我可以创建一些允许我这样做的运算符吗?

在Nemerle语言中我可以写宏:

macro @|||(left, right)
  match (left)
    | <[ $x == $y ]> => <[ $x == $y || $x == $right ]>
    | _ => Message.Error("Error"); <[ ]>
Run Code Online (Sandbox Code Playgroud)

然后用法:

if (x == 1 ||| 2) { .. }
Run Code Online (Sandbox Code Playgroud)

我可以在F#中以这种方式创建运算符吗?

f# programming-languages metaprogramming nemerle

2
推荐指数
1
解决办法
489
查看次数

在Boo中定义运算符

我正在寻找将一些较轻的元编程从Nemerle转移到Boo,我试图找出如何定义自定义运算符.例如,我可以在Nemerle中执行以下操作:

macro @<-(func, v) {
    <[ $func($v) ]>
}
Run Code Online (Sandbox Code Playgroud)

那么这两个是等价的:

foo <- 5;
foo(5);
Run Code Online (Sandbox Code Playgroud)

我无法在Boo中找到这样做的方法 - 任何想法?

macros boo metaprogramming nemerle

1
推荐指数
1
解决办法
659
查看次数

输入Nemerle

我想知道如何从窗体的控制台获取输入:

M 14 65 99 in nemerle.在C#中,我这样做:

            string[] input = System.Console.ReadLine().Split(' ');
            ch = System.Char.Parse(input[0]);
            a  = System.Int32.Parse(input[1]);
            d =  System.Int32.Parse(input[2]);
            m =  System.Int32.Parse(input[3]);
Run Code Online (Sandbox Code Playgroud)

但这并不适用于Nemerle.请建议我如何在Nemerle做.

c# nemerle

1
推荐指数
1
解决办法
309
查看次数